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