多级对象到单级对象

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);