首页 > 解决方案 > 使用数组作为键来遍历 JavaScript 中的对象

问题描述

我正在学习 JavaScript,并且花了很多时间练习遍历数组和对象数组。我想学习如何使用数组作为对象数组的过滤器。我找不到任何解释如何做到这一点的文章,所以我自己尝试使用嵌套循环。但是,我无法让它工作。

变量 catKey[]; 是包含我想用来过滤 var posts[] 的数据的数组;,识别哪些对象在 Property cat: [] 中匹配并返回标题属性。我知道我可以使用 array.Filter 但我希望能够做到这一点,前提是我并不总是知道 catKey 数组中的项目数。用例是针对我使用事件处理程序的情况,当我添加的链接被单击 WordPress 中的帖子并返回类别 ID 时,我将搜索帖子列表以查找具有相同类别的其他帖子标识。谁能告诉我哪里出错了。

var catKey = [2, 6];
var posts = [
  {
    id: 1,
    cat: [1, 2, 3],
    title: "Hello World"
  },
  {
    id: 2,
    cat: [5, 6, 7],
    title: "Hello JavaScript"
  },
  {
    id: 3,
    cat: [8, 9],
    title: "Hello Arrays!"
  }
];

for (var i = 0; i < catKey.length; i++) {
  for (var j = 0; j < posts.length[i]; j++) {
    if (catKey[i] === posts[j].cat) {
      document.write(posts[j].title);
    }
  }
}

标签: javascriptarrays

解决方案


var catKey = [2, 6];
var posts = [
  {
    id: 1,
    cat: [1, 2, 3],
    title: "Hello World"
  },
  {
    id: 2,
    cat: [5, 6, 7],
    title: "Hello JavaScript"
  },
  {
    id: 3,
    cat: [8, 9],
    title: "Hello Arrays!"
  }
];

var result = posts.filter(({cat})=>{
  return catKey.filter((key)=>{
     return cat.includes(key)
  }).length > 0
})

console.log(result);

精简版

posts.filter(({ cat }) => catKey.filter(key => cat.includes(key)).length > 0);

推荐阅读