js数组去重及合并的问题

230 阅读1分钟

数组合并

数组合并不去重

  1. 方法一:arr1.concat(arr1)
  2. 方法二:arr1.push.apply(arr1,arr2)
  3. 方法三:[…arr1,…arr2]
  4. 方法四:arr1.push(…arr) 方法一、方法三不改变原数组;方法二、方法四会改变arr1

数组合并去重

方法一:new Set() 该方法只适用于简单数据类型的数组,不适合对象数组

[...new Set([...[1,2], ...[1,2]])]

方法二:利用对象key的唯一性

let jsonArr = [
    {
        "NO": "3",
        "NAME": "测试对象3"
    },
    {
        "NO": "4",
        "NAME": "测试对象4"
    },
    {
        "NO": "5",
        "NAME": "测试对象5"
    }
    ];

    let jsonArr2 = [
    {
        "ID": "",
        "NO": "3",
        "NAME": "测试对象3"
    },
    {
        "ID": "",
        "NO": "4",
        "NAME": "测试对象4"
    },
    {
        "ID": "",
        "NO": "6",
        "NAME": "测试对象6"
    },
    ];

    let length1 = jsonArr.length;
    let length2 = jsonArr2.length;
            let obj = {}
            for (let i = 0; i < length1; i++) {
                    obj[jsonArr[i]['NO']] = jsonArr[i]
            }
            for (let j = 0; j < length2; j++) {
                    obj[jsonArr2[j]['NO']] = jsonArr2[j]

            }
    console.log(Object.values(obj));

方法三:嵌套的for循环

let length1 = jsonArr.length;
let length2 = jsonArr2.length;
        for (let i = 0; i < length1; i++) {
                for (let j = 0; j < length2; j++) {
                        if (jsonArr.length > 0) {
                                if (jsonArr[i].NO === jsonArr2[j].NO) {
                                        jsonArr.splice(i, 1)
                                        length1--
                                }
                        }

                }
        }

for (let n = 0; n < jsonArr2.length; n++) {
    jsonArr.push(jsonArr2[n]);
}

console.log(jsonArr); 

单个数组去重(不涉及合并)

参考下面的文档:www.zhihu.com/question/27…