有两个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":"葡萄"}]