【发布时间】:2017-07-31 01:49:44
【问题描述】:
我有一个具有以下结构的对象:(查看名为 dataValues 的数组)。
{
pager: {
page: 1,
pageCount: 1,
total: 0,
pageSize: 50
},
events: [{
storedBy: "admin",
dueDate: "2017-07-12T19:11:19.801",
dataValues: [{
dataElement: "F3ogKBuviRA",
value: "[-10.33505,8.46094]",
},
{
dataElement: "oZg33kd9taw",
value: "Female",
}
],
notes: []
},
{
storedBy: "admin",
dueDate: "2017-07-12T19:11:11.449",
dataValues: [{
dataElement: "pzsJKs59JsY",
value: "G-3707",
},
{
dataElement: "AmO6YwrO46f",
value: "Male",
},
],
}
]
}
我需要访问每个嵌套数组dataValues 并返回一个由键对组成的对象:值,其中键是 dataElement 的值,值是 value:
dataElement: value => oZg33kd9taw: "Female"。最后,我想像这样构造一个 GeoJSON:
{
type: "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
type: "Point",
"coordinates": [-10.33505, 8.46094]
},
"properties": {
//inject extracted values here!!
oZg33kd9taw: "Female",
pzsJKs59JsY: "G-3707"
}
}]
}
我尝试实现一个递归函数,深入到对象中,直到找不到嵌套对象,然后返回值:
function eachRecursive(obj){
for (var k in obj){
if (typeof obj[k] == "object" && obj[k] !== null)
eachRecursive(obj[k]);
if (obj.dataValues != undefined) {
obj.dataValues.forEach(d => {console.log(d)})
console.log(obj.dataValues);
}
}
}
这没有按预期工作,因为它返回了 n 次值(其中 n 是对象内现有 dataValues 数组的数量)。非常感谢任何使用 vanilla JS 或 lodash、ramda 或类似库的建议或解决方案。如果我可以将值对提取到数组数组或单独的对象中,那将有很大帮助。谢谢!
这是一个小提琴:https://jsfiddle.net/zrLnva0u/6/
【问题讨论】:
-
为什么要使用递归?您的数据中没有任意嵌套,它只有两个级别。所以使用两个嵌套循环,一个用于
events,一个用于dataValues。 -
GeoJSON 中的
Male发生了什么?为什么F3ogKBuviRA会变成坐标?
标签: javascript object nested extract