我有一个数组如:
var db = [{
"words": ["word1a", "word1b", "word1c"],
"answer": "answer1"
}, {
"words": ["word2a", "words2b"],
"answer": "answer2"
}]
我在node.js上使用lodash来检查数组中的值。我想搜索单词并返回回复。例如,如果我搜索" word1a",则响应为" answer1"
我试试:
var e = _.find(db, function(o){
o.words === "say"
});
console.log(e);
但我找不到结果;
显然,我未定义,因为我正在比较一个确切的值。我怎样才能获得价值?
答案 0 :(得分:6)
嗯,你也得到undefined
,因为你还没有返回o.words === "say"
比较。
但是你是对的,这种比较在这种情况下不起作用。您应该在_.some
回调中使用_.find
之类的内容:
var e = _.find(db, function(o) {
return _.some(o.words, function(word) {
return word === 'say';
});
});
这应该会返回对象(如果没有找到,则为undefined)。如果你特别需要answer
,你仍然需要将它从对象中拉出来。
这是一个working fiddle。请注意,您还应该对undefined
个对象/属性进行一些额外保护。不过,我会把它留给你。
答案 1 :(得分:2)
ES6版本:
const term = "word1b";
const res = _(db)
.filter(item => item.words.indexOf(term) !== -1)
.first()
.answer;
如另一个答案所述,您仍应检查是否存在从获取的对象中预先获取.answer
值。