如何从Javascript中的过滤器返回特定值

时间:2019-09-09 22:16:36

标签: javascript object filter

我有一个对象数组

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选项?

3 个答案:

答案 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”,空]