给定的搜索字符串:如何使用每个对象的所有属性过滤一个对象数组以检查匹配?
Jane
这个数组对象:
[
{
name: 'Jane Smith',
address: '123 Main St, Boston, MA',
telephone: {
primary: '1234567890',
secondary: '1112223333'
}
},
{
name: 'John Smith',
address: '333 Main St, New York, NY 56789',
telephone: {
primary: '2223334444',
secondary: '3334445555'
}
},
...
]
我们可以通过名字滤镜阵列:
arr.filter(person => person.name.includes(search))
大。如果我们只搜索每个对象的name
属性,那效果很好。
在对象的所有属性上进行过滤的最佳做法是什么?
我们有权利做这样的事情:
arr.filter(person =>
person.name.includes(search) ||
person.address.includes(search) ||
person.telephone.primary.includes(search) ||
person.telephone.secondary.includes(search)
)
如果有这很乏味,而且容易出错超过几个属性。
如果任何属性的值与搜索字符串匹配,是否有过滤数组的方法?
更新:
这很好地工作的人对象的顶级性能。
.filter(person => {
for (let property in person) {
return String(person[property]).includes(search)
}
})
努力尝试找到通过自身可为对象的属性递归搜索一个很好的解决方案。
你想递归或只顶级做到这一点,您可以通过使用['对... in']对象文本的性质迭代(https://developer.mozilla.org/en -US /文档/网络/的JavaScript /参考/语句/对...的)。 –
@SpencerWieczorek,适用于顶级对象。那么你如何递归测试'obj [prop]'是否是一个对象本身? –
相同的想法,但你会调用递归函数,[看看这个问题](http://stackoverflow.com/questions/2549320/looping-through-an-object-tree-recursively)。 –