使用javascript过滤嵌套的js对象数组

我正在尝试从嵌套的 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 中),我该怎么做呢?


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


呼唤远方
浏览 214回答 2
2回答

斯蒂芬大帝

我只是先把它弄平(第一个控制台日志),除非你想要整个“外部”数组,在这种情况下只做.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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript