【问题标题】:for loop inside array filter method [duplicate]数组过滤器方法中的for循环[重复]
【发布时间】:2021-03-02 13:21:23
【问题描述】:

假设我有两个数组

从这里我想用 arr2 条件过滤 arr1(假设 arr2 = arr1 id)。 我试过这段代码,但只返回第一个条件。

const arr1 = [{
    id: 1,
    name: "Jhon"
  },
  {
    id: 2,
    name: "Barbara"
  },
  {
    id: 3,
    name: "Rio"
  }
];
const arr2 = [1, 2, 5];


const filter = (arr1, arr2) => {
  const output = arr1.filter(value => {
    for (let i = 0; i < arr2.length; i++) {
      if (value.id !== arr2[i]) {
        return false;
      }
      return true;
    }
  })
  console.log(output);
};

filter(arr1, arr2);
// output = [{id: 1, name: "Jhon"}]
// intended output [{id: 1, name: "Jhon"}, {id: 2, name: "Barbara}]

谁能告诉我我错过了什么?谢谢

【问题讨论】:

  • 你的 return true;inside for 循环体,所以如果 value.id !== arr2[i] 为假,它会在第一次循环迭代时运行。将它移到 for 循环之后,这样当没有任何条目匹配时,您只需要 return false;。或者你可以使用some:.filter(value =&gt; arr2.some(v =&gt; v === value.id))

标签: javascript arrays


【解决方案1】:

看看为什么它不起作用,然后大大简化它

const arr1 = [{ id: 1, name: "Jhon" }, { id: 2, name: "Barbara" }, { id: 3, name: "Rio" } ];
const arr2 = [1, 2, 5];

const filter = (arr1, arr2) => arr1.filter(({id}) => arr2.includes(id))

console.log(filter(arr1,arr2))

【讨论】:

  • 嘿,我的数组倒退了,因此在我的评论中使用some 而不是includes
  • @T.J.Crowder 我想知道。有点像我们认识的女人,她将一切都视为减少
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 2021-07-15
  • 2010-11-14
  • 2020-06-20
  • 2019-09-13
  • 1970-01-01
  • 2021-04-10
  • 2022-08-15
相关资源
最近更新 更多