使用父值展平数组

时间:2018-05-17 17:07:59

标签: javascript underscore.js lodash

给出

[
 {"id":1,"country":"US","area":1,"values":[{"city":"Chicago"},{"city":"New York"}]}, 
 {"id":2,"country":"Canada","area":2,"values":[{"city":"Toronto"},{"city":"Quebec"}]}
]

我正在尝试将数据展平为表格格式,将values数组中的每个对象作为一个表行,并重复父项字段。

结果

[
  {"country":"US","city":"Chicago"},
  {"country":"US","city":"New York"},
  {"country":"Canada","city":"Toronto"},
  {"country":"Canada","city":"Quebec"}
]

我想提一下从父字段中保留哪些字段。对于前单个字段,即我们示例中的国家字段。其他示例可能包括多个或所有父字段。

有没有一种优雅的方式来达到预期的效果?现在我正在使用嵌套for循环来实现相同的目标。

1 个答案:

答案 0 :(得分:1)

它最终是两个嵌套循环,但您可以利用mapreduce来简化代码。见下文:

const input = [
 {"id":1,"country":"US","area":1,"values":[{"city":"Chicago"},{"city":"New York"}]}, 
 {"id":2,"country":"Canada","area":2,"values":[{"city":"Toronto"},{"city":"Quebec"}]}
];

const result = input.reduce((output, {country, values}) =>
  output.concat(values.map(({city}) => ({ country, city }))), []);
  
console.log(result);