美文网首页
如何实现一个 flatMap 函数 ?

如何实现一个 flatMap 函数 ?

作者: 薄荷加冰_dd68 | 来源:发表于2020-11-30 10:56 被阅读0次

基础学习:JavaScript(ES6)扁平化嵌套方法flatMap()和flat()

Array.prototype.flatMap()

flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 连着深度值为1的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。

//只有一层

const arr1 = [1, 2, 3, 4,[5],6,[7]];

const res=arr1.flatMap(x =>x)

console.log(res);

//打印:(7) [1, 2, 3, 4, 5, 6, 7]

//两层时

const arr2 = [1, 2, 3, 4,[[5]],6,[[[7]]]];

const res=arr2.flatMap(x =>x)

console.log(res);

打印:[1, 2, 3, 4, [5], 6, [[7]]]

Array.prototype.flat()

flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

参数:depth 可选–(指定要提取嵌套数组的结构深度,默认值为 1)

返回值:一个包含将数组与子数组中所有元素的新数组。

//depth可选,默认1

const arr1 = [1, 2, 3, 4,[5],6,[7]];

console.log(arr1.flat());

//打印:(7) [1, 2, 3, 4, 5, 6, 7]

//depth---2

const arr1 = [1, 2, 3, 4,[[5]],[6],[[7]],[[8]]];

console.log(arr1.flat(2));

//打印:(7) [1, 2, 3, 4, 5, 6, 7]

//depth---Infinity 不管有多少层嵌套,都要转成一维数组

const arr1 = [1, 2, 3, 4,[[5]],[6],[[7]],[[8]],[[[[[[9]]]]]] ];

console.log(arr1.flat(Infinity));

//打印:(9) [1, 2, 3, 4, 5, 6, 7, 8, 9]

注意:如果原数组有空位,flat()方法会跳过空位。

[1, 2, , 4, 5].flat()

// [1, 2, 4, 5]

那回归本题,如何实现一个 flatMap 函数 ?

第一种:没说不让用flat;所以有个取巧的办法 const flatMap = arr => arr.flat().map(x =>x);

第二种:flat()和flatMap()本质上就是是归纳(reduce) 与 合并(concat)的操作。

letarr=[[0,1],[2,3],[4,5]];

letnewArr=arr.reduce((pre,cur)=>{returnpre.concat(cur)}, [])

console.log(newArr);// [0, 1, 2, 3, 4, 5]

相关文章

网友评论

      本文标题:如何实现一个 flatMap 函数 ?

      本文链接:https://www.haomeiwen.com/subject/peeedktx.html