如何过滤/循环嵌套数组

时间:2021-07-30 00:09:35

标签: javascript node.js arrays nested

我有一个这样的数组

let names = [
    {name:"Haruhiro", alias:["Haru", "Hal"]},
    {name:"John", alias:["Jon"]},
    {name:"Samantha", alias:["Sam"]},
]

我需要根据用户输入的内容过滤它的项目。

let output = names.filter((e) => e.name === userInput);

这仅适用于名称,但我无法这样做,因此它会同时检查名称和可能的别名,因为它可以拥有任意数量的别名,我需要循环遍历它,但我已经当我在过滤器中时,在某种循环中。我试过类似

let output = names.filter((e) => e.name === userInput || e.alias.filter((a) => a === userInput));

但它不起作用。所以在我循环的数组中有一个数组,我需要循环遍历

2 个答案:

答案 0 :(得分:1)

您应该使用返回 sometrue/false 循环遍历嵌套数组,而不是返回元素数组的 filter(始终为 true)。

let names = [
  {name:"Haruhiro", alias:["Haru", "Hal"]},
  {name:"John", alias:["Jon"]},
  {name:"Samantha", alias:["Sam"]},
];

const result = names.filter(person => person.name === "no" || person.alias.some(alias => alias === 'Hal'));
console.log(result);

答案 1 :(得分:0)

由于您的别名数组,您可以对它使用 includes 方法来查看它是否具有您要检查的值,因此您的代码将是这样的:

let names = [{
    name: "Haruhiro",
    alias: ["Haru", "Hal"]
  },
  {
    name: "John",
    alias: ["Jon", "Hal"]
  },
  {
    name: "Samantha",
    alias: ["Sam"]
  },
]
let userInput = 'Hal'

let output = names.filter((e) => e.name === userInput || e.alias.includes(userInput));
console.log(output)