0

假设我有一个 JS 对象,其中包含其他对象,但它们都具有相同的结构。我正在尝试在其中搜索任何重复的值。例如:

{
    {
        id: "123"
        name: "John"
        surname: "Smith"
        phone: "123456789"
    }, 
    {
        id: "456"
        name: "Jack"
        surname: "Jones"
        phone: "9876789123"
    }, 
    {
        id: "789"
        name: "John"
        surname: "Doe"
        phone: "123456789"
    }
}

我想搜索并发现值为“123456789”的属性“电话”在 ID 为“123”和“789”的两个对象上是相同的。

注意:我正在搜索的属性/值组合事先是未知的。

4

2 回答 2

2

首先,如果外部结构是 plain Object,请改用 an Array。如果你不能改变结构,我会先转换它。

演示:http: //jsfiddle.net/3Y2qr/

if (!Array.isArray(data))
    data = Object.keys(data)
                 .sort(function(a,b) { return a - b })
                 .map(function(key) { return data[key] })

然后,您可以将集合减少为匹配组。

var groupByPhone = data.reduce(function(found, obj) {
    if (found[obj.phone])
        found[obj.phone].push(obj)
    else
        found[obj.phone] = [obj]
    return found
}, {});

var dupes = Object.keys(groupByPhone)
                  .filter(function(key) {
                      return groupByPhone[key].length > 1
                  })

所以现在groupByPhone是一个对象,其中键是唯一的电话号码,值是具有该号码的对象。

dupes将是一个电话号码键列表,可用于在 中查找重复对象组groupByPhone

于 2013-05-16T17:03:55.537 回答
0

Array.prototype.filter来救援!

var searchFor = '123456789';

var filteredResult = arrayOfObjects.filter(function( obj ) {
    return obj.phone === searchFor;
});

console.log( filteredResult );
于 2013-05-16T16:50:05.927 回答