我正在尝试从嵌套的js对象获取数据,这是我的输入。
var data =
[ [ { Id: '123', Name: 'Abc', Amount: 110000 }
, { Id: '567', Name: 'DEF', Amount: 98000 }
, { Id: '345', Name: 'XYZ', Amount: 145000 }
]
, [ { Id: '656', Name: 'Abc', Amount: 110000 }
, { Id: '223', Name: 'DEF', Amount: 98000 }
, { Id: '897', Name: 'XYZ', Amount: 145000 }
] ]
在这里,当我想获取223
的数据时。
我不太了解如何在嵌套js对象中进行操作。
在常规的js对象数组中,我使用如下所示的filter方法。
var result= data.filter(element => ((element.Id == "223")).
但是在嵌套js对象(在ES6中)的情况下,我该怎么办?
答案 0 :(得分:1)
除非您需要整个“外部”阵列,否则我将首先对其进行展平(第一个控制台日志),在这种情况下,只需两次.find
:
var data = [
[{
"Id": "123",
"Name": "Abc",
"Amount": 110000
},
{
"Id": "567",
"Name": "DEF",
"Amount": 98000
},
{
"Id": "345",
"Name": "XYZ",
"Amount": 145000
}
],
[{
"Id": "656",
"Name": "Abc",
"Amount": 110000
},
{
"Id": "223",
"Name": "DEF",
"Amount": 98000
},
{
"Id": "897",
"Name": "XYZ",
"Amount": 145000
}
]
];
var result = data.flat().filter(element => element.Id == "223");
console.log(result);
console.log(data.find(el => el.find(item => item.Id === "223")))
答案 1 :(得分:1)
您可以先.flat()
data
个数组,然后对其进行简单的过滤并搜索所需的Id
;
或递归过滤数组,然后搜索所需的Id
。
下面的代码段演示了第二种方法
let result = data.map( array =>
array.filter( item => item.Id === "223" )
).flat();
var data =
[ [ { Id: '123', Name: 'Abc', Amount: 110000 }
, { Id: '567', Name: 'DEF', Amount: 98000 }
, { Id: '345', Name: 'XYZ', Amount: 145000 }
]
, [ { Id: '656', Name: 'Abc', Amount: 110000 }
, { Id: '223', Name: 'DEF', Amount: 98000 }
, { Id: '897', Name: 'XYZ', Amount: 145000 }
] ];
let result = data.map( array => array.filter( item => item.Id === "223" )).flat();
console.log(result);