2

我有一个这样的数组:

var myObjArray = [{city: 'milwaukee', state: 'wi'}, 
                  {city:'madison', state: 'wi'}, 
                  {city:'greenbay', state: 'wi'}, 
                  {city:'madison', state: 'wi'}];

我将如何将数组与自身进行比较以查找重复项。
(注意:我需要保留重复项,所以也许我可以向对象添加一个属性作为标志)。

4

1 回答 1

2

怎么样:

var bucket = {};
for(var i=0;i<array.length;i++) {
    var item = array[i];
    var hash = JSON.stringify(item); //or some a hashing algorithm...
    var prev = bucket[hash];
    if(prev) {
        prev.duplicate = item.duplicate = true;
    } else {
        bucket[hash] = item 
    }   
}

或相同而不依赖于JSON.stringify

var markDuplicates = function(array, hashFunc) {
    var bucket = {};
    for(var i=0;i<array.length;i++) {
        var item = array[i];
        var hash = hashFunc(item);
        var prev = bucket[hash];
        if(prev) {
            prev.duplicate = item.duplicate = true;
        } else {
            bucket[hash] = item 
        }   
    }
    return array;
};

markDuplicates(yourArray, function(item) { return item.city + item.state; });
于 2013-01-30T18:41:51.463 回答