代码之家  ›  专栏  ›  技术社区  ›  lost9123193

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

  •  0
  • lost9123193  · 技术社区  · 5 年前

    我有一个对象数组

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

    2 回复  |  直到 5 年前
        1
  •  1
  •   Nikhil    5 年前

    你必须使用 filter() 在你的 animals 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
  •  1
  •   jacob13smith    5 年前

    您正在反向使用过滤器功能。您应该在 animals 数组。试试这个:

    const selectedAnimals = animals.filter(function(e) {
       return selected.find(id => e.id == id);
    })
    

    这将给你一个带有id的动物对象的列表,如果你想创建一个只包含名字的数组,你可以在上面循环并提取名字。

        3
  •  0
  •   harisu    5 年前

    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))
        )
    
    

    选择的动物应该有[{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} )
    
    

    [“猫”,“狗”,空值]