我有一个对象数组
animals[
{id:1, name:"cat"},
{id:2, name:"dog"},
{id:3, name:"fish"}
]
我还有另一个
selected = [1,2]
我希望以所选字符串的形式返回:
"cat, dog"
我目前知道如何过滤
const selectedAnimals = selected.filter(function(e) {
return animals.find(o => o.id == e);
})
但这将返回ID列表。如何返回名称列表和字符串格式?我需要使用reduce还是可以使用filter选项?
答案 0 :(得分:1)
您正在反向使用过滤器功能。您应该在animals
数组上使用过滤器。试试这个:
const selectedAnimals = animals.filter(function(e) {
return selected.find(id => e.id == id);
})
这将为您提供带有id的动物对象列表,然后如果您要创建仅包含名称的数组,则可以遍历并提取名称。
答案 1 :(得分:1)
您必须在animals
数组上使用filter()。可以使用includes()检查数组是否包含给定值。
var selectedAnimals = animals.filter(animal => selected.includes(animal.id));
实时示例:
var animals = [
{id:1, name:"cat"},
{id:2, name:"dog"},
{id:3, name:"fish"}
];
var selected = [1,2];
var selectedAnimals = animals.filter(animal => selected.includes(animal.id));
console.log(selectedAnimals);
答案 2 :(得分:0)
您可以通过执行以下操作
将其存档let animals = [
{id:1, name:"cat"},
{id:2, name:"dog"},
{id:3, name:"fish"}
]
let selected = [1,2]
const selectedAnimals = animals.filter(e =>(
selected.includes(e.id))
)
和selectedAnimals应该具有[{{id:1,name:“ cat”},{id:2,name:“ dog”}]
或者,您可以使用地图,但最终会有以下结果。
let selectedAnimals = animals.map((e,t) => { if(selected.includes(e.id)) return e.name; else return null} )
[“ cat”,“ dog”,空]