我有一个数组模型如下:
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
答案 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
。
您正在将label
与id
值进行比较。
{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方法的一对。
链filter
和map
并解构返回的数组。
const [nodeLabel] = nodes
.filter(({id}) => id === selectedNode)
.map(({label}) => label)
使用reduce
const nodeLabel = nodes
.reduce((returnValue, item) => {
if (item.id === selectedNode) return item.label
return returnValue
})