牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2016-07-01 投稿人: 浏览次数:1670

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,然后遍历,找出对象长度大于一的来进行加属性的操作。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。