我现在正在使用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集合具有findWherewhere方法,与Backbone的整体术语匹配具有优势。

07-24 09:47
查看更多