首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flatMap而不是of

flatMap而不是of
EN

Stack Overflow用户
提问于 2018-01-27 13:03:23
回答 2查看 61关注 0票数 0

我有这个;

代码语言:javascript
复制
let subs = [];
 for ( const item of items ) { // array
        for ( const sub of item ) { // array
            subs.push( sub );
        }
    }

并希望得到与此相同的结果(版本2):

代码语言:javascript
复制
 const arr = Object.values(items).map(item => 
         item.map(sub => sub)
    );

但是,在版本2中,我为每个“项”获取一个"subs“数组,而不是一个包含所有"subs”的数组(如版本1)。我需要像"flatMap“这样的东西。或者我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-27 13:05:10

是的,flatMap在ES6中是相当微不足道的

代码语言:javascript
复制
let flatMap = (a, fn) => [].concat(...a.map(fn));

示例:

代码语言:javascript
复制
let flatMap = (a, fn) => [].concat(...a.map(fn));

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

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

票数 2
EN

Stack Overflow用户

发布于 2018-01-27 13:06:50

使用减缩的简单解决方案是

代码语言:javascript
复制
items.reduce ((flat, item) => flat.concat (item), [])

代码语言:javascript
复制
var items = [[1,2,3],[4,5,6]]
var flat = items.reduce ((flat, item) => flat.concat (item), []);
console.log (flat)

递归版本几乎同样简单:

代码语言:javascript
复制
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, []))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48476089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档