前几天有朋友问我数组去重怎么做,我说简单的数组去重很简单啊,他说是对象形式的,我想了想,也有了点思路。
但是我还是上网查了一下,各路大神四面八方杀来,我觉得很麻烦,而且有的方法还不适用我的数组需求,下面进入正题:
需求是:去除数组中name与age都相同的项;
<script type="text/javascript">
$(document).ready(function(){
var oldArr = [
{name:1,age:1},
{name:2,age:2},
{name:2,age:2},
{name:3,age:3},
{name:3,age:4},
{name:4,age:5},
{name:4,age:4},
{name:4,age:0},
{name:5,age:6},
{name:5,age:6},
{name:1,age:0},
{name:1,age:0},
{name:2,age:0},
{name:3,age:0},
{name:1,age:0},
];
for (var i = 0; i < oldArr.length - 1; i++) {
for (var j = 1; j < oldArr.length; j++) {
if (i != j) {
if (oldArr[i].name == oldArr[j].name && oldArr[i].age == oldArr[j].age) {
oldArr.splice(j, 1)
}
}
}
}
console.log(oldArr)
})
</script>
这样一个二维数组去重就解决了。
是不是非常简单易懂。
当然了,对于大神来说,这不是太low了么,而且他的效率也很慢,下面再呈现一种简单的方法 GO=>
数组还是那个数组 ;
const obj = {};
for(const item of oldArr){
obj[item.name+','+item.age] = item
}
oldArr = Object.values(obj)
console.log(oldArr) //现在就得到大家想要的结果了。
如果说需求改成只需要去除对象中某一项相同的项,怎么做呢,那就简单了,咱们就举例去除name相同的项;
const obj = {};
oldArr = oldArr.reduce((cur,next)=>{
obj[next.name] ? '' : obj[next.name] = true && cur.push(next)
return cur;
},[])
cosnole.log(oldArr) //搞定
最后再给大家奉上一种基本类型数组去重的方法
var arr = [1,1,2,2,3,3,4,4,5,5];
function dist(arr){
return arr.reduce((acc,cur) => {
acc.includes(cur) || acc.push(cur)
return acc;
},[]) //别忘了最后这个参数啊!这叫做归并基础的初始值
}
去重的方法还有很多种 ES6的set去重更简单,多了解一些总没有坏处,大家继续加油!!!