在对象的对象中查找匹配项

时间:2013-05-16 16:47:35

标签: javascript

假设我有一个包含其他对象的对象,它们都具有相同的属性名称,我想在其中搜索任何匹配的值。例如

[Object]
    0: Object
        id: "123"
        name: "John"
        surname: "Smith"
        phone: "123456789"
    1: Object
        id: "456"
        name: "Jack"
        surname: "Jones"
        phone: "9876789123"
    2: Object
        id: "789"
        name: "John"
        surname: "Doe"
        phone: "123456789"

我想搜索并发现值为'123456789'的属性'phone'在具有ID'123'和'789'的两个对象上是相同的。 请注意,我要搜索的值未知。

2 个答案:

答案 0 :(得分:2)

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

DEMO: 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中查找重复对象组。

答案 1 :(得分:0)

Array.prototype.filter救援!

var searchFor = '123456789';

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

console.log( filteredResult );