[英]How to filter array of objects and get filtered object value
我有一個數組模型如下:
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
您可以通過傳遞提供的callback
函數來使用find
方法。
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');
nodes.find(node => node.id === selectedNode).label
你很親近
這條線
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 );
您可以通過幾種方法來完成自己想做的事情。 這是一對使用本機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 })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.