从JSON中提取键值数组

时间:2018-06-10 11:16:59

标签: javascript arrays json lodash

如何从嵌套的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"
  }
]

4 个答案:

答案 0 :(得分:4)

jsonData.data.allLecturesJson.edges.map(e => e.node)

这应该可以解决问题。

答案 1 :(得分:2)

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

  

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




答案 2 :(得分:0)

我们可以使用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];
}, []);

答案 3 :(得分:0)

您可以使用带有Array.map()函数表达式的Arrow方法使用单行代码实现此目的。

<强>演示

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