非常简单的二维数组去重

前几天有朋友问我数组去重怎么做,我说简单的数组去重很简单啊,他说是对象形式的,我想了想,也有了点思路。

  但是我还是上网查了一下,各路大神四面八方杀来,我觉得很麻烦,而且有的方法还不适用我的数组需求,下面进入正题:

需求是:去除数组中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去重更简单,多了解一些总没有坏处,大家继续加油!!!

发布了4 篇原创文章 · 获赞 1 · 访问量 5144

猜你喜欢

转载自blog.csdn.net/maxiaotengzhang/article/details/80365974