js数组包含两个数组对象,怎么数组对象去重

let aa = [[{ a:1,b:2 },{ a:4,b:3 },{ a:1,b:2 }],[{ a:1,b:2 },{ a:1,b:2 },{ a:1,b:8 },{ a:1,b:7 }]]

                        let newArr = [];
                        let obj1 = {};
                        for (var i = 0; i < aa.length; i++) {
                         for(var j = 0; j < aa[i].length;j++){
                             if (!obj1[aa[i][j].a]) {
                               newArr.push(aa[i][j]);
                               obj1[aa[i][j].a] = true;
                             }
                         }
                        }
                        console.log(newArr);
                        //怎么样才能输出这样的结果:let aa = [[{ a:1,b:2 },{ a:4,b:3 }],[{ a:1,b:2 },{ a:1,b:8 },{ a:1,b:7 }]]
阅读 2.3k
2 个回答

第一种方法

let aa = [[{ a:1,b:2 },{ a:4,b:3 },{ a:1,b:2 }],[{ a:1,b:2 },{ a:1,b:2 },{ a:1,b:8 },{ a:1,b:7 }]];

aa.map(item=>Object.values(item.reduce((acc,cur)=>((acc||={})[cur.a+'_'+cur.b]=cur,acc),{})))

//结果
image.png

[[{"a":1,"b":2},{"a":4,"b":3}],[{"a":1,"b":2},{"a":1,"b":8},{"a":1,"b":7}]]

第二种方法
image.png


let aa = [[{ a:1,b:2 },{ a:4,b:3 },{ a:1,b:2 }],[{ a:1,b:2 },{ a:1,b:2 },{ a:1,b:8 },{ a:1,b:7 }]];

aa.map(items=>[...new Set(items.map(item=>JSON.stringify(item)))].map(item=>JSON.parse(item)))

普通写法

let aa = [[{ a:1,b:2 },{ a:4,b:3 },{ a:1,b:2 }],[{ a:1,b:2 },{ a:1,b:2 },{ a:1,b:8 },{ a:1,b:7 }]];
let newArr = [];
aa.forEach(items=>{
 let newItem =[];
 let map = new Map();
 items.forEach(item=>{
  if(!map.has(JSON.stringify(item))){
    newItem.push(item);
    map.set(JSON.stringify(item), '');
  }
 })
 newArr.push(newItem);
})

console.log(newArr);

image.png

const _ = {
   map: (arr, cb) => arr.map(cb),
   
   isEqual: (v1, v2) => JSON.stringify(v1) === JSON.stringify(v2), // hack 方法
   
   uniqWith: (arr, cb) => {
     const result = [];
     arr.forEach(item => {
        if (!result.find(i => cb(i, item))) {
           result.push(item);
        }
     });
     
     return result
   }  

}


_.map(aa, arr => _.uniqWith(arr, _.isEqual))

_ 可以替换为lodash实现

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题