判断数组中元素多个属性是否重复

本文介绍两种在JavaScript中检查并标记数组中具有重复属性值(如name和age)的对象的方法:一种是通过双层循环遍历,另一种是利用underscore.js库进行分组处理。

js中判断数组元素的重复的方法有很多,可以用hash的方法或者排序之后再进行比较,但是我们这里说的case是这样的。假设我有一个数组[{name:'neal',age:'18'},{name:'neal',age:'18'},{name:'jane',age:'20'}].假如数组中元素name和age这两个属性都相同我们则给这个元素加一个属性flag设置为true,否则设置为false.其实就是判断数组中元素中多个属性是否重复的问题了。
这种问题有一个比较死的方法就是拿两个循环来做处理

    for (var i = 0,len = collection.length;i < len;i++) {
        var count = 0;
        for (var j = 0;j < len;j++) {
            if (collection[i].name === collection[j].name && collection[i].age === collection[j].age) {
                count = count + 1;
            }
        }
        if (count > 1) {
            collection[i].flag = true;
        }
        else {
            collection[i].flag = false;
        }
    }
    return collection;
};

另外一种方法是使用underscore.js里面的方法了,不过由于underscore一次只能按照一个属性来groupBy,所以也需要多次嵌套

collection = _.groupBy(collection,'name');
for (var i in collection) {
    if (collection[i].length > 1) {
        col = _.groupBy(collection[i],'age');
        for (var j in col) {
        if (col[j].length > 1) {
        _.map(col[j], function(ele) {
            ele.flag = true;
        })
        }
        }

    }
    else {
        arr1[i].flag = false;
    }
}

这个方法是按照name,age进行groupby,然后遍历,找出对象长度大于一的来进行加属性的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值