我有一个具有以下结构的对象:(查看名为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
并返回一对key:values的对象,其中键是 dataElement 的值,值是的值值:
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/
答案 0 :(得分:0)
@Bergi说的话......
var pairs = {};
data.events.forEach(event => {
event.dataValues.forEach(el => {
pairs[el.dataElement] = el.value;
});
});
console.log(pairs)
答案 1 :(得分:0)
经过大量的来回,这是解决方案,万一有人想知道:
data.events.forEach((event) => {
cases.push(event.dataValues);
});
for (var i = 0; i < cases.length; i++) {
var dataValues = cases[i];
var object = {};
for (var j = 0; j < dataValues.length; j++) {
var d = dataValues[j];
object[d.dataElement] = d.value;
}
test.push(object);
}
这将返回一个数组数组,其中每个数组都包含一个dataElement: value
对的对象。