所以我想说我有一些JSON:
{
"users": [{
"name": "bob",
"age": 16,
"likes": ["cats", "kayaking", "knitting"]
}, {
"name": "kyle",
"age": 19,
"likes": ["dogs", "soccer", "baseball"]
}, {
"name": "mike",
"age": 18,
"likes": ["cats", "cars", "kayaking"]
}]
}
我想通过这个并返回包含“猫”和“皮划艇”之类的所有用户对象。我正在使用lodash,似乎没有lodash方法来做到这一点。我只看到_.findKey和_.includes。是否有一种方法或一组方法我可以使用这样做或者我最好只使用vanilla javascript?
答案 0 :(得分:3)
您正在寻找_.filter()
:
var output = _.filter(input.users, function(item) {
return _.includes(item.likes, 'cats')
&& _.includes(item.likes, 'kayaking');
});
使用您指定的过滤器功能过滤数组。如果此过滤器函数为数组的给定项返回true
,则此项将包含在结果数组中。
答案 1 :(得分:1)
如果你想使用Vanilla JS:
您可以使用indexOf
和比较器阵列进行比较。
使用此比较器数组,您可以过滤结果以仅返回符合条件的对象。
另外使用reduce
方法返回true或false,具体取决于数组中字符串的一个是否与比较器数组匹配。
var comparator = ['dogs', 'baseball'];
var dogsAndBaseball = obj.users.filter(function(obj) {
return obj.reduce(function(acc, cur) {
return acc || comparator.indexOf(cur) > -1;
}, false);
});
这将返回
[{
"name": "kyle",
"age": 19,
"likes": ["dogs", "soccer", "baseball"]
}]