如何过滤对象数组并获取过滤后的对象值

时间:2017-10-27 09:13:12

标签: javascript arrays

我有一个数组模型如下:

nodes:[
 { id: 1, label: 'label1'},
 { id: 2, label: 'label2'},
 { id: 3, label: 'label3'}
]

我想通过id

获得节点过滤的标签

我尝试了下一个方法,但是没有让它运作

const selectedNode = 2;

const nodeLabel = nodes.filter(({id}) => id.label ? id === selectedNode) // its filter here

4 个答案:

答案 0 :(得分:3)

您可以通过传递find提供的功能来使用callback方法。

find()方法返回数组中传递提供的测试函数的第一个元素的值。否则返回undefined



let nodes=[
 { id: 1, label: 'label1'},
 { id: 2, label: 'label2'},
 { id: 3, label: 'label3'}
];
let id=2;
let node = nodes.find(a=>a.id == id);
console.log(node ? node.label : 'id not found');




答案 1 :(得分:1)

nodes.find(node => node.id === selectedNode).label

答案 2 :(得分:1)

你很亲密。

这一行

nodes.filer(({id}) => id.label ? id === selectedNode)

几乎没有问题(假设filer只是一个错字

  • 将整数与对象进行比较。 ( id 是此处的对象)

  • filter会为您提供对象列表,而不是其属性label

  • 您正在将labelid值进行比较。

  • {id}将被id替换。

只需将其修改为

即可
nodes.filter( (id) => id.id === selectedNode )[0].label

<强>演示

var nodes = [
 { id: 1, label: 'label1'},
 { id: 2, label: 'label2'},
 { id: 3, label: 'label3'}
];
var selectedNode = 2;
console.log( nodes.filter( (id) => id.id === selectedNode )[0].label );

答案 3 :(得分:1)

有几种方法可以做你正在尝试做的事情。以下是使用原生Array方法的一对。

  1. filtermap并解构返回的数组。

    const [nodeLabel] = nodes
      .filter(({id}) => id === selectedNode)
      .map(({label}) => label)
    
  2. 使用reduce

    const nodeLabel = nodes
      .reduce((returnValue, item) => {
        if (item.id === selectedNode) return item.label
        return returnValue
      })