繁体   English   中英

从JSON提取键值数组

[英]Extract array of key-values from JSON

如何从嵌套的JS对象生成具有特定键值对的数组? 有lodash函数可以做这种事情吗?

原始数据

{
  "data": {
    "allLecturesJson": {
      "edges": [
        {
          "node": {
            "index": 1,
            "date": "01/02/2018",
            "presenter": "Mary",
          }
        },
        {
          "node": {
            "index": 2,
            "date": "01/03/2018",
            "presenter": "Jack",
          }
        },
  }
}

预期结果

[
  {
    "index": 1,
    "date": "01/02/2018",
    "presenter": "Mary",
  },
  {
    "index": 2,
    "date": "01/03/2018",
    "presenter": "Jack"
  }
]
jsonData.data.allLecturesJson.edges.map(e => e.node)

这应该够了吧。

首先,您的数据格式不正确。 您必须将其格式化为有效的对象。

map()方法创建一个新数组,并在调用数组中的每个元素上调用提供的函数。

使用Array.prototype.map()尝试以下方式:

 var jsonData = { "data": { "allLecturesJson": { "edges": [ { "node": { "index": 1, "date": "01/02/2018", "presenter": "Mary", } }, { "node": { "index": 2, "date": "01/03/2018", "presenter": "Jack", } } ] } } } var resArr = jsonData.data.allLecturesJson.edges.map(i => i.node); console.log(resArr); 

我们可以使用Array.prototype.reduce()实现所需的数据结构。 无需使用lodash :)

这是一个转换结构的函数:

const input = {
  "data": {
    "allLecturesJson": {
      "edges": [
        {
          "node": {
            "index": 1,
            "date": "01/02/2018",
            "presenter": "Mary",
          }
        },
        {
          "node": {
            "index": 2,
            "date": "01/03/2018",
            "presenter": "Jack",
          }
        }]
  }
}};

const output = input.data.allLecturesJson.edges.reduce((accumulator, currVal) => {
  return [...accumulator, currVal.node];
}, []);

您可以使用带有Arrow函数表达式的Array.map()方法通过Array.map()代码来Array.map()

演示版

 var jsonObj = { "data": { "allLecturesJson": { "edges": [ { "node": { "index": 1, "date": "01/02/2018", "presenter": "Mary", } }, { "node": { "index": 2, "date": "01/03/2018", "presenter": "Jack", } } ] } } }; var res = jsonObj.data.allLecturesJson.edges.map(obj => obj.node); console.log(res); 

暂无
暂无

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

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