繁体   English   中英

使用 javascript 过滤嵌套的 js object 数组

[英]Filtering nested js object array using javascript

我正在尝试从嵌套的 js object 获取数据,这是我的输入。

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 object 中做到这一点。
在常规 js object 数组中,我使用如下所示的过滤方法。

var result= data.filter(element => ((element.Id == "223")).

但是如果嵌套 js object(在 ES6 中),我该怎么做?

我提到了这里的帖子并在这里做了一个小提琴,它没有按预期工作。

我只是先将它展平(第一个控制台日志),除非你想要整个“外部”数组,在这种情况下只需执行.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")))

您可以.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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM