尝试 return 键值与这些值匹配的所有对象

Trying to return ALL objects with key values that match these values

所以假设我有一些 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"]
    }]
}

我想遍历 return 所有用户对象,其中包括 "cats" 和 "kayaking"。我正在使用 lodash,但似乎没有 lodash 方法可以做到这一点。我只看到 _.findKey 和 _.includes。有没有我可以使用的方法或方法组可以做到这一点,还是我最好只使用香草 javascript?

如果你想使用 Vanilla JS:


您可以使用 indexOf 和比较器数组进行比较。

使用此比较器数组,您可以将结果筛选为 return 仅符合条件的对象。

另外使用 reduce 方法来 return 真或假,这取决于数组中的 一个 字符串是否与您的比较器数组匹配。

var comparator = ['dogs', 'baseball'];

var dogsAndBaseball = obj.users.filter(function(obj) {
  return obj.reduce(function(acc, cur) {
    return acc || comparator.indexOf(cur) > -1;
  }, false);
});

这将 return

[{
    "name": "kyle",
    "age": 19,
    "likes": ["dogs", "soccer", "baseball"]
}]

您正在寻找_.filter()

var output = _.filter(input.users, function(item) {
    return _.includes(item.likes, 'cats')
        && _.includes(item.likes, 'kayaking');
});

使用您指定的过滤函数过滤数组。如果此过滤器函数 returns true 用于数组的给定项目,则此项目将包含在结果数组中。