javascript - 尝试将过滤器应用于充满对象的嵌套数组

标签 javascript arrays loops foreach javascript-objects

我有一个充满对象的资源数组。每个对象都有充满对象的类别数组。我正在尝试应用过滤器以仅返回具有特定名称的类别对象的资源。我在嵌套数据对象时遇到了一些问题。

这是我正在处理的数据:

const resources = [
  {
    title: 'Learn JS',
    categories: [
      {
        name: 'javascript'
      },
      {
        name: 'css'
      }
    ]
  },
  {
    title: 'Learn CSS',
    categories: [
      {
        name: 'css'
      }
    ]
  },
  {
    title: 'Learn other stuff',
    categories: [
      {
        name: 'jQuery'
      },
      {
        name: 'javascript'
      }
    ]
  },
  {
    title: 'Learn node',
    categories: [
      {
        name: 'node'
      }
    ]
  },
  {
    title: 'Learn React',
    categories: [
      {
        name: 'react'
      }
    ]
  },

];

这是我的两次尝试。两者都返回空数组。我尝试使用 mapsfilters 是不是错了。是否需要 for 循环

//GOAL: Return only the resources that have a category with name 'javascript'
const attemptOne = resources.filter((item) => {
  return item.categories.forEach((thing, index) => {
    return thing[index] === 'javascript'
  });
}).map((item) => {
  return item;
})

const attemptTwo = resources.filter((item) => {
  item.categories.filter((ci) => {
    return ci.name === 'javascript'
  }).map((nextItem) => {
    return nextItem;
  });
})

我已经在这个问题上摸索了一段时间,我不确定我是否只是把它复杂化了。提前致谢!

最佳答案

您可以对资源使用过滤器。在过滤器内部,因为您已经知道一个对象有类别,所以您可以只使用 some检查是否包含您要查找的类别名称

const resources = [{
  title: 'Learn JS',
  categories: [{
    name: 'javascript'
  }, {
    name: 'css'
  }]
}, {
  title: 'Learn CSS',
  categories: [{
    name: 'css'
  }]
}, {
  title: 'Learn other stuff',
  categories: [{
    name: 'jQuery'
  }, {
    name: 'javascript'
  }]
}, {
  title: 'Learn node',
  categories: [{
    name: 'node'
  }]
}, {
  title: 'Learn React',
  categories: [{
    name: 'react'
  }]
}];

function filterViaCategory(arr, category) {
  return arr.filter(obj => obj.categories.some(cat => cat.name === category));
}

console.log(filterViaCategory(resources, 'javascript'));

关于javascript - 尝试将过滤器应用于充满对象的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38517373/

相关文章:

javascript - .append() 不附加 PHP 代码

javascript - 如何将 handsontable 数据传输到同一页面上的不同 JavaScript?

python - 如何使用 python 在循环语句内创建多个矩阵?

c - 产生无限循环的基本函数

javascript - 如何在移动浏览器上显示滚动 div(或其他容器)?

Javascript keyup/onkeyup 错误元素

javascript - 某些 Bootstrap 类不工作(Bootstrap 4、Navbar 和 bg-)

python - numpy 数组中元素的顺序

c - 在 C 中的 unsigned char 中搜索关键字

c - While 循环按引用传递字符数组