【问题标题】:How to Return Specific Values from a Filter in Javascript如何从 Javascript 中的过滤器返回特定值
【发布时间】:2019-09-09 22:16:36
【问题描述】:

我有一个对象数组

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

【问题讨论】:

  • 只是反过来过滤,找到被选中的动物,然后得到它们的名字?
  • 你为什么要使用过滤器? selected 是否会包含不在动物中的 ID?
  • 哦,粗鲁,是的,这完全让我失望了......

标签: javascript object filter


【解决方案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】:

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

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

    这将为您提供一个带有 id 的动物对象列表,然后如果您想创建一个仅包含名称的数组,您可以遍历该列表并提取名称。

    【讨论】:

      【解决方案3】:

      您可以通过执行以下操作将其存档

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

      [“猫”,“狗”,空]

      【讨论】:

        猜你喜欢
        • 2020-03-14
        • 2015-12-03
        • 1970-01-01
        • 2019-01-29
        • 1970-01-01
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多