【问题标题】:Filtering nested js object array using javascript使用javascript过滤嵌套的js对象数组
【发布时间】:2020-10-07 21:24:52
【问题描述】:

我正在尝试从嵌套的 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 对象数组中,我使用如下过滤器方法。

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

但是如果是嵌套的 js 对象(在 ES6 中),我该怎么做呢?

我参考了here 的帖子,并做了一个小小提琴here,它没有按预期工作。

【问题讨论】:

  • Id 是独一无二的吗?如果是,你为什么不使用find() 方法?
  • 嵌套 JSON?你的意思是一个带有对象的数组?
  • @epascarello 原帖是 JSON

标签: javascript json


【解决方案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")))

【讨论】:

    【解决方案2】:

    你可以先.flat()data数组,然后对它做一个简单的过滤并搜索你想要的Id; 或递归过滤数组,然后搜索您想要的Id。 下面的sn-p演示了第二种方式

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      相关资源
      最近更新 更多