检查数组中的对象属性是否唯一

时间:2014-09-05 13:56:42

标签: javascript underscore.js

我有这个数组:

[{category:'Cat A'}, {category:'Cat B'},{category:'Cat A }]

如果数组中的两个或多个键(类别)相同,我想要一个返回true的函数。

使用下划线有什么聪明的方法吗?在文档中找不到任何内容。或者我需要手动循环吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试uniq功能:

var arrayUniq = _.uniq(myArray, function(item) { return item.category; });
var isUniq = arrayUniq.length === myArray.length

答案 1 :(得分:0)

作为一名新的JS程序员,我只想使用JS来解决这个问题。这是我的尝试,如果我在这里遗漏了什么,请建议

给定对象数组(或存储)

var storeWithDup = [{category: "Cat A"}, {category: "Cat B"}, {category: "Cat A"}]; var storeWithoutDup = [{category: "Cat A"}, {category: "Cat B"}, {category: "Cat C"}];

1。使用自定义比较函数

对对象数组进行排序
var myComparator = function(value1, value2){
    if(value1.hasOwnProperty("category") &&
        value2.hasOwnProperty("category")){

        if(value1.category < value2.category){
            return -1;
        } else if(value1.category > value2.category){
            return 1;
        } else {
            return 0;
        }
    }
};

2。检查数组中重复的相邻元素

var arrayDuplicateChecker = function(inpArray){
    for(var i = 1; i < inpArray.length; i++){
        if(inpArray[i-1].category == inpArray[i].category){
            return true;
        }
    }
    return false;
};

3。帮助函数检查商店中的重复类别

var checkForDuplicateCat = function(inpStore){
    // 1. Sort array
    inpStore.sort(myComparator);
    // 2. check for adjacent duplicates
    return arrayDuplicateChecker(inpStore);
};

结果

alert(checkForDuplicateCat(storeWithDup));  // True
alert(checkForDuplicateCat(storeWithoutDup));  // False

链接 JS Fiddle: Object array sort and comparator

答案 2 :(得分:0)

我的,我们制作的事情有多复杂。

var array = [{category: 'Cat A'}, {category: 'Cat B'}, {category: 'Cat A }],
    groups = _.groupBy(array, 'category');
    duplicated = Object.keys(groups).filter(function(cat) {
        return groups[cat].length>1; 
    });

的console.log(重复);