1. 程式人生 > >陣列的去重方法總結(包括物件陣列的去重方法)

陣列的去重方法總結(包括物件陣列的去重方法)

陣列的去除在真實專案中是非常的常用,那麼在這裡總結一下物件陣列及基本型別陣列的去重方法,主要利用了物件的鍵值是唯一的一個特性。

1:去重方法一利用陣列的索引對應的值。

let arr = [2,3,3,3,2,4,2];
console.log("arr is a instance of arr ",(typeof arr));
let str = "asdfasdf";
console.log("str is an instance of Array",str instanceof Array);
console.log("str is an instance of String ?",(typeof str) === 'string');
function uniqForBasic(array){
    let temp = [];
    let index = [];
    let len = array.length;
    for(let i = 0;i < len;i++){
        for(let j = i+1;j < len;j++){
            //如果下一個值等於前一個值重複
            if(array[i] === array[j]){
                i++;
                j = i;
            }
        }
        temp.push(array[i]);
        index.push(i);
    }
    return temp;
}
let res = uniqForBasic(arr);
console.log("res is ",res);

2:利用物件的鍵值是唯一的這個特性,但是缺點是查重後的陣列元素都為字串型別,如果是需要Number型別或者其他型別的話需要自己轉換

//陣列去重方法二 缺點鍵值都是字串對於數字陣列需要進行特殊處理
function uniqByObj(array){
    let len = array.length;
    let tempJson = {

    }
    for(let i = 0;i < len;i++){
        tempJson[`${array[i]}`] = true;
    }
    console.log("tempJson is ",tempJson);
    return Object.keys(tempJson);
}
let res2 = uniqByObj(arr);
console.log("res is ",res2);

3:物件陣列的去重方法:把物件陣列的每一項的物件作為一個物件的鍵值匯出就得出去重後的數值。

let objArr = [
    {
        'msg':'sdfsdf',
        'text' : 'sdafasfdasdf'
    },
    {
        'msg':'sdfsdf',
        'text' : 'sdafasfdasdf'
    },
    {
        'msg'  : 'hello',
        'text' : 'world' 
    },
    {
        'msg'  : 'js',
        'text' : 'c++'
    }
]
//物件陣列的去重
function uniqObjInArray(objarray){
    let len = objarray.length;
    let tempJson = {
        
    };
    let res = [];
    for(let i = 0;i < len;i++){
        //取出每一個物件
        tempJson[JSON.stringify(objarray[i])] = true;
    }
    console.log("tempJson is ",tempJson);
    let keyItems= Object.keys(tempJson);
    for(let j = 0;j < keyItems.length;j++){
        res.push(JSON.parse(keyItems[j]));
    }
    return res;
}
let res3 = uniqObjInArray(objArr);
console.log("res3 is ",res3);

哪裡有不對的地方歡迎各位同仁指正謝謝!