javascript - 在 JS 中过滤具有深层嵌套数组的数组

标签 javascript arrays

如何过滤具有深层嵌套数组的数组?给定以下 2 个数组,我需要结果是一个仅包含 rice cakesgluten-free-pizza 对象的数组:

const foodsILike = ['gluten-free', 'carb-free', 'flavor-free'];
const foodsAvailable = [
  { name: 'pasta', tags: ['delicious', 'has carbs']}, 
  { name: 'gluten-free-pizza', tags: ['gluten-free']}, 
  { name: 'pizza', tags: ['delicious', 'best meal of the year']},
  { name: 'rice cakes', tags: ['flavor-free']}
]

我尝试了以下只返回所有内容(4 个对象)的方法:

var result = foodsAvailable.filter(function(food) {
  return foodsILike.filter(function(foodILike) {
    return foodILike === food;
  })
})

result
// Array [ Object, Object, Object, Object]

最佳答案

你可以使用 Array#someArray#includes用于检查 foodsILike 是否包含标签。

const foodsILike = ['gluten-free', 'carb-free', 'flavor-free'];
const foodsAvailable = [{ name: 'pasta', tags: ['delicious', 'has carbs'] }, { name: 'gluten-free-pizza', tags: ['gluten-free'] }, { name: 'pizza', tags: ['delicious', 'best meal of the year'] }, { name: 'rice cakes', tags: ['flavor-free'] }]

var result = foodsAvailable.filter(function(food) {
    return food.tags.some(function(tag) {
        return foodsILike.includes(tag);
    });
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在 JS 中过滤具有深层嵌套数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45482466/

相关文章:

php - 如何在mysql中以内爆形式插入数组值

javascript - 使用sequelize(javascript ORM)来编辑,加载数据表而不删除它们(mysql)

javascript - 如何从 jQuery 选择器返回的列表中删除元素?

javascript - swal没有出现,但是数据传递了

java - 将 ArrayList 拆分为多个 ArrayList

JavaScript/jQuery UI : Changing element img src from an array of images based on current img src

javascript - 如何设置<c :forEach begin ="1" end ="?"> tag based on Selected DropDown的结束值

javascript - 单击鼠标更改div的内容

javascript - 使用 Javascript 更改具有特定 ID 的所有 URL

arrays - 用 bash 替换数组中的字符串