[英]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.