flatMap而不是for

时间:2018-01-27 13:03:24

标签: javascript ecmascript-6

我有这个;

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中,我为每个“item”获取一个“subs”数组,而不是一个包含所有“subs”的数组(如版本1中所示)。我需要像“flatMap”这样的东西。或者我该怎么做?

2 个答案:

答案 0 :(得分:2)

是的,let flatMap = (a, fn) => [].concat(...a.map(fn)); 在ES6中相当微不足道

let flatMap = (a, fn) => [].concat(...a.map(fn));

items = [[1,2], [3,4], [5,6]]

console.log(flatMap(items, x=>x))

示例:

NB_EPOCH = 200
BATCH_SIZE = 128
VERBOSE = 1
NB_CLASSES = 10
N_HIDDEN

答案 1 :(得分:1)

使用reduce的简单解决方案是

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, []))