我正在使用下划线链,并且最后一点被困在其中。
我只是需要它来查看一个对象数组并通过它的键返回正确的对象。这就是我所拥有的
var item = _.chain(items)
.findwhere({module: modulename})
.result('customUrl')
//here is where the problem is
.find(function(v,k){ return k == stateName })
.value();
所以这个工作要找到.find。在对象的那个点上,find正在查看这个:
[{"obj1" : ["1","2"]},{"obj2" : ["3","4"]}]
我只是希望它返回一个具有相同密钥的密钥,该密钥存储在正在传递的变量stateName中。因此,如果stateName是“obj1”,它将返回我[“1”,“2”]。如果没有下划线有更好的方法可以做到这一点,我会全力以赴,但我现在一直在使用它。
由于
编辑:我已根据这里的答案进行了尝试。
要明确这是我的数据:
[
{"module":"module1",
"customUrl":[{"mod1":["1","2"]},{"mod2":["1","2"]}]
},
{"module":"module2",
"customUrl":[{"mod3":["true","false"]},{"mod4":["5","6"]}]
}
]
尝试:
checkitem = _.chain(currentState)
.findWhere({module: moduleName})
.result('customUrl')
.find(function(v){ return v.hasOwnProperty(stateName)})
.values()
.flatten()
.value();
因此,如果var stateName是mod1,我希望它返回我[“1”,“2”],就像下面的答案中一样,我觉得我的链接有些不对劲。谢谢!
答案 0 :(得分:1)
如果您确定只有一场比赛,那么您可以使用find
,因为它会在第一场比赛后返回。
var items = [{
"obj1": ["1", "2"]
}, {
"obj2": ["3", "4"]
}, {
"obj3": ["5", "6"]
}];
var stateName = "obj1";
var item = _.chain(items)
.find(function(currentObject) {
return _.has(currentObject, stateName);
})
.values()
.flatten()
.value();
console.log(item);
# [ '1', '2' ]
答案 1 :(得分:1)
您可以使用in
查看属性是否存在(哪个属性成为您的谓词):
var item = _.chain(items)
.findwhere({module: modulename})
.result('customUrl')
.find(function(v){ return stateName in v })
.value();
可替换地:
.find(function(v){ return v.hasOwnProperty(stateName) })
答案 2 :(得分:0)
如果您使用过滤器而不是查找该怎么办?
.filter(function(v, k) {
return k === stateName;
});