假设我有一个包含其他对象的对象,它们都具有相同的属性名称,我想在其中搜索任何匹配的值。例如
[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'的两个对象上是相同的。 请注意,我要搜索的值未知。
答案 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 );