为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼唤远方 2023-04-27 16:19:24
我正在尝试从嵌套的 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 中),我该怎么做呢?我提到了这里的帖子并在这里做了一个小提琴,它没有按预期工作。
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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


查看完整回答
反对 回复 2023-04-27
?
慕斯王

TA贡献1864条经验 获得超2个赞

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


查看完整回答
反对 回复 2023-04-27
  • 2 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信