【发布时间】:2016-02-16 10:58:32
【问题描述】:
我有以下数据:
let Collection = [{
id: '1',
uid: 'u1',
rci: 'r1',
name: 'ClientName'
}, {
uid: 'u2',
name: 'ClientName 2'
}, {
rci: 'r3',
name: 'ClientName 3'
}]
id、uid 和 rci 是三个不同的 id 属性(来自糟糕的数据库合并)。
每个客户:
- 至少具有这些属性之一
- 可能有所有三个 id
现在的问题: 我必须使用与此类似的对象搜索此集合:
search: {
id: undefined,
uid: 'u3',
rci: 'r3'
}
匹配集合中的第三个条目,因为 rci 属性匹配。
显然,有这样的解决方案:
let match;
let test = Collection.forEach(item => {
Object.keys(search).forEach(key => {
console.log('iteration')
if(item[key] && item[key] === search[key]) {
match = item
}
})
})
但我一直在寻找更优雅的解决方案。 我也在使用下划线。
注意:这是 Immutable.js 集合/地图/列表的 POJO 版本。如果使用 Immutable.js 可以实现同样的目标,那就太好了:)
【问题讨论】:
-
"
if(item[key] && item[key] === search[key]) {" 您的搜索值都不能为零吗? (或任何其他虚假值?) -
@T.J.Crowder 通常 ID 不能为零。但是,糟糕的数据库,谁知道...
-
尚未检查它是否能满足您的要求,但 Underscore 有一个
IsMatch功能:underscorejs.org/#isMatch -
@Me.Name:不,因为他的示例
search不会匹配第三个条目,因为第三个条目只有rci而不是uid或id。跨度>
标签: javascript underscore.js immutable.js