多级对象到单级对象
Multi-level object to single level object
我正在尝试将复杂的对象数组文档映射到单级数组。例如..
[{
name: 'birds',
references: [{ name: 'owl', value: 20 },
{ name: 'sparrow', value: 23 }],
identified: { created: '2014-02-02' }
}, {
name: 'animals',
references: [{ name: 'cat', value: 20 },
{ name: 'deer', value: 23 }],
identified: { created: '2014-02-02' }
}]
objective就是不管多复杂,把数组变成这样的东西
[{name: 'birds', references-owl: 20, references-sparrow: 23, identified-created: '2014-02-02'},
{name: 'animals', references-cat: 20, references-deer: 23, identified-created: '2014-02-02'}]
基本上,如果循环遍历数组中的每个项目,然后循环遍历每个 属性。
如果 属性 是一个数组,将 属性 添加到父对象,其键由数组中的名称 属性 和父键值组成,例如 'references-owl' 和来自 属性 的值。可以忽略第一级以外的所有其他数组对象。
如果 属性 是对象,则在键前加上父对象 属性 并将其添加到父对象。如果存在子数组,重复上面的操作。
提前致谢!!!
.map()
and .reduce()
的组合正是您需要的:
var data = [{
name: 'birds',
references: [{ name: 'owl', value: 20 },
{ name: 'sparrow', value: 23 }],
identified: { created: '2014-02-02' }
}, {
name: 'animals',
references: [{ name: 'cat', value: 20 },
{ name: 'deer', value: 23 }],
identified: { created: '2014-02-02' }
}];
var result = data.map(function(row){ // For each row in data.
// Set the static data in the result row
var reference = { name: row.name, 'identified-created': row.identified.created };
// Iterate over `row.references`, and add the current reference to the result.
row.references.reduce(function(previous, current){
previous['reference-' + current.name] = current.value;
return previous;
}, reference);
return reference;
});
console.log(result);
我正在尝试将复杂的对象数组文档映射到单级数组。例如..
[{
name: 'birds',
references: [{ name: 'owl', value: 20 },
{ name: 'sparrow', value: 23 }],
identified: { created: '2014-02-02' }
}, {
name: 'animals',
references: [{ name: 'cat', value: 20 },
{ name: 'deer', value: 23 }],
identified: { created: '2014-02-02' }
}]
objective就是不管多复杂,把数组变成这样的东西
[{name: 'birds', references-owl: 20, references-sparrow: 23, identified-created: '2014-02-02'},
{name: 'animals', references-cat: 20, references-deer: 23, identified-created: '2014-02-02'}]
基本上,如果循环遍历数组中的每个项目,然后循环遍历每个 属性。
如果 属性 是一个数组,将 属性 添加到父对象,其键由数组中的名称 属性 和父键值组成,例如 'references-owl' 和来自 属性 的值。可以忽略第一级以外的所有其他数组对象。
如果 属性 是对象,则在键前加上父对象 属性 并将其添加到父对象。如果存在子数组,重复上面的操作。
提前致谢!!!
.map()
and .reduce()
的组合正是您需要的:
var data = [{
name: 'birds',
references: [{ name: 'owl', value: 20 },
{ name: 'sparrow', value: 23 }],
identified: { created: '2014-02-02' }
}, {
name: 'animals',
references: [{ name: 'cat', value: 20 },
{ name: 'deer', value: 23 }],
identified: { created: '2014-02-02' }
}];
var result = data.map(function(row){ // For each row in data.
// Set the static data in the result row
var reference = { name: row.name, 'identified-created': row.identified.created };
// Iterate over `row.references`, and add the current reference to the result.
row.references.reduce(function(previous, current){
previous['reference-' + current.name] = current.value;
return previous;
}, reference);
return reference;
});
console.log(result);