前几天去找实习,碰到一道JS对象数组去重的题目,解法其实与JS普通数组去重的方法类似。
1.JS数组去重
方法1:
var arr = [1,1,2,2,2,3,4,5,6,7,8,9,9,9,10];
var newArr = [...new Set(arr)];//ES6的新语法
console.log(newArr);
方法2:
var arr = [1,1,2,2,2,3,4,5,6,7,8,9,9,9,10];
var newArr = arr.filter((item,index,array)=>{
return arr.indexOf(item) === index;
})
console.log(newArr);
2.JS对象数组去重
对象数组去重有很多方法,下面介绍一种最容易理解的办法:把数组里的对象转化成字符串JSON.stringify(),再利用JS数组去重的方法2来处理数组即可。
var arr = [{a:1,b:2},{a:1,b:2},{a:3,b:1},{a:5,b:2},{a:3,b:1}];//对象数组
var stringArr = arr.map((item,index,array)=>{
return JSON.stringify(item)
})//转化为字符串数组
var filterArr = stringArr.filter((item,index,array)=>{
return array.indexOf(item) === index;
})//过滤相同的字符串
var lastArr = filterArr.map((item,index,array)=>{
return JSON.parse(item);
})//重新转化为对象数组
console.log(lastArr);//[{a:1,b:2},{a:3,b:1},{a:5,b:2}];