我现在正在使用API,并且正在使用details[5].Value
以以下格式定位信息:
details:
"value":[
{
"ID": "6",
"Name": "Links",
"Value": "URL"
},
{
"ID": "7",
"Name": "Other",
"Value": "URL"
}
etc
]
问题在于,JSON响应内部的位置将来可能会更改,这会使我的代码过时,并且由于url也有可能更改,因此我无法针对此目标。
我主要想通过
"Name"
属性的值来定位url的值。但是,如果我使用类似_.where(details, { Name: "Links" }).Value
它以未定义的形式返回。我不确定是否还有其他获取信息的方法?
最佳答案
这里有两点混乱。_.where
返回一个数组:
浏览列表中的每个值,返回包含属性中列出的所有键值对的所有值的数组。
所以您的_.where(details, obj).Value
(几乎)总会给您undefined
,因为数组不太可能具有Value
属性。另一方面,_.findWhere
确实返回一个值:
浏览列表并返回与属性中列出的所有键值对匹配的第一个值。
其次,您的details
看起来像:
let details = {
value: [
{ ID: '6', Name: 'Links', Value: 'URL' },
{ ID: '7', Name: 'Other', Value: 'URL' },
...
]
}
因此,您不想搜索
details
,而是想搜索details.value
。将它们放在一起:
_(details.value).findWhere({ Name: 'Links' }).Value
要么
_.findWhere(details.value, { Name: 'Links' }).Value
您可以使用
Array.prototype.find
(如果要查找所有匹配项,则可以使用Array.prototype.filter
)并编写自己的回调,但是您已经有Underscore可用,那么为什么要打扰呢?此外,Backbone集合具有findWhere
和where
方法,与Backbone的整体术语匹配具有优势。