我有一个这样的数组
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));
但它不起作用。所以在我循环的数组中有一个数组,我需要循环遍历
答案 0 :(得分:1)
您应该使用返回 some
的 true/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)