我有这个;
let subs = [];
for ( const item of items ) { // array
for ( const sub of item ) { // array
subs.push( sub );
}
}并希望得到与此相同的结果(版本2):
const arr = Object.values(items).map(item =>
item.map(sub => sub)
);但是,在版本2中,我为每个“项”获取一个"subs“数组,而不是一个包含所有"subs”的数组(如版本1)。我需要像"flatMap“这样的东西。或者我该怎么做?
发布于 2018-01-27 13:05:10
是的,flatMap在ES6中是相当微不足道的
let flatMap = (a, fn) => [].concat(...a.map(fn));示例:
let flatMap = (a, fn) => [].concat(...a.map(fn));
items = [[1,2], [3,4], [5,6]]
console.log(flatMap(items, x=>x))
发布于 2018-01-27 13:06:50
使用减缩的简单解决方案是
items.reduce ((flat, item) => flat.concat (item), [])
var items = [[1,2,3],[4,5,6]]
var flat = items.reduce ((flat, item) => flat.concat (item), []);
console.log (flat)
递归版本几乎同样简单:
var reducer = (flat, item) => Array.isArray (item)?item.reduce(reducer,flat):flat.concat (item);
var items = [[1,2,3,[7,8,9]],[4,5,6]]
console.log (items.reduce(reducer, []))
https://stackoverflow.com/questions/48476089
复制相似问题