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

时间:2020-10-07 21:24:52

标签: javascript json

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

我提到了here个帖子,做了一个小提琴here,该按钮无法正常工作。

2 个答案:

答案 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);