JS实现JSON数组合并和去重

有两个json数组arr1和arr2

var arr1 = [{"id": 0, "name": "苹果"},{"id": 1,"name": "西红柿"}];

var arr2 = [{"id": 2, "name": "苹果"},{"id": 3,"name": "橘子"},{ "id": 4,"name":"葡萄"}];

 

两个数组合并

数组合并用的是concat方法,它可以用于字符串之间的连接和数组之间的连接。

var arrConcat= arr1.concat(arr2);
console.log(arrConcat); //[{"id": 0, "name": "苹果"},{"id": 1,"name": "西红柿"},{"id": 2, "name": "苹果"},{"id": 3,"name": "橘子"},{ "id": 4,"name":"葡萄"}]

 

数组去重

上面已经得到合并的数组 arrConcat,去掉name属性是一样的json对象。

JSON数组去重利用对象的属性名不可重的特性来做判断,然后得到新的数组,就是去重后的数组。

var temp = {};   //用于name判断重复
var result = [];  //最后的新数组

arrConcat.map(function (item, index) {
    if(!temp[item.name]){
        result.push(item);
        temp[item.name] = true;
    }
});

console.log(result);//[{"id": 0, "name": "苹果"},{"id": 1,"name": "西红柿"},{"id": 3,"name": "橘子"},{ "id": 4,"name":"葡萄"}];

 

json数组去重方法封装

/**
 * JSON数组去重
 * @params {Array} arr 传入的JSON数组
 * @param {String} attrName 根据哪个属性名去重
 * @return {Array} 返回新的去重后的数组
 * */
function delRepeatJson(arr = [], attrName = '') {
    var temp = {}; //用于name判断重复
    var result = []; //最后的新数组

    arr.forEach(function (item, index) {
        if (!temp[item[attrName]]) {
            result.push(item);
            temp[item[attrName]] = true;
        }
    });
    return result;
}

const arrConcat = [{"id": 0, "name": "苹果"},{"id": 1,"name": "西红柿"},{"id": 2, "name": "苹果"},{"id": 3,"name": "橘子"},{ "id": 4,"name":"葡萄"}];
console.log(delRepeatJson(arrConcat, 'name')); // [{"id":0,"name":"苹果"},{"id":1,"name":"西红柿"},{"id":3,"name":"橘子"},{"id":4,"name":"葡萄"}]

posted on 2022-11-28 17:24  小华同学  阅读(1741)  评论(0编辑  收藏  举报

导航