使用数组作为键来遍历JavaScript中的对象

时间:2019-03-01 11:45:31

标签: javascript arrays

我正在学习JavaScript,并花了很多时间练习遍历对象数组和数组。我想学习如何将数组用作对象数组的过滤器。我找不到任何说明如何执行此操作的文章,所以我自己使用了嵌套循环。但是,我无法使其正常工作。

Var catKey [];是包含要用于通过var posts []过滤的数据的数组; ,在[Property]猫[[]]中识别哪些对象具有匹配项,然后返回title属性。我知道我可以使用array.Filter,但我希望能够在不总是知道catKey数组中的项目数的前提下执行此操作。该用例适用于以下情况:我使用事件处理程序,当我添加的链接在WordPress中的帖子上单击并返回类别ID时,我将在帖子列表中进行搜索,以查找具有相同类别的其他帖子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);
    }
  }
}

4 个答案:

答案 0 :(得分:0)

根据您的问题,我假设catKey包含嵌套的cat数组应匹配的数字白名单,即只要在cat数组中找到任何值, {1}},您想保留它们。

在这种情况下,您可以简单地使用catKeys遍历所有帖子,并评估各个帖子的.filter()数组与白名单之间是否存在任何交集:

cat

如果您想尝试用ES6编写代码,那也不是问题:而且更加简洁!

var filteredPosts = posts.filter(function(post) {
  return post.cat.filter(function(c) { return catKey.indexOf(c) !== -1; }).length;
});

请参见下面的概念验证:

const filteredPosts = posts.filter(post => post.cat.filter(c => catKey.includes(c)).length);

答案 1 :(得分:0)

您可以同时使用mapfind来检查数组中的值和对象数组中的值。使用mapcatKey数组进行迭代,对于every element find用于使用post在名为.includes()的数组内的对象内部的对象中查找数组中的该元素。 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!" }]; console.log(catKey.map((e) => posts.find((x) => x.cat.includes(e))))方法。

$base  = "https://".$_SERVER['HTTP_HOST']; // (For https)

答案 2 :(得分:0)

要找到第一个符合您条件的条目,可以使用Array.prototype.find()函数:

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!" }
];

const resObj = posts
    .find(p => p.cat.some(c => catKey.includes(c)))
    .title;

console.log(resObj)

或者要查找所有,请使用Array.prototype.filter()

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!" }
];

const resObjs = posts
    .filter(p => p.cat.some(c => catKey.includes(c)))
    .map(o => o.title);

resObjs.forEach((t) => console.log(t));

答案 3 :(得分:0)

ret

简短版本

call