数组上的方法——flat、map与flatMap

flat

  1. 定义:展平数组,默认展平一层,传入参数depth则展平depth层,返回展平后的数组,不改变原数组。

const arr1 = [0, 1, 2, [3, 4]];
arr1.flat() // [0, 1, 2, 3, 4]

  1. 使用 Infinity,可展开任意深度的嵌套数组。
  2. 使用 flat方法会移出数组中的空项。

[1, , 3, 4, , 6].flat() // [1, 3, 4, 6]
Array(3).flat() // []

  1. 实现

function flatten (list) {
if(!Array.isArray(list)) {
throw Error('参数类型错误!')
} else {
let finialArr = [];
(function flat(arr) {
arr.forEach(item => {
if(Array.isArray(item)) {
flat(item);
} else {
finialArr.push(item);
}
})
})(list);
return finialArr;
}
}
flatten (arr); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

map

  1. 不改变原数组,对原数组数组中的每个元素都调用一次回调函数作为新数组元素,返回新数组。参数:
    @params{callback},回调函数的参数为 elementindexarray
    @params{this},this指向;

var a = Array.prototype.map.call("Hello World", x => x.charCodeAt(0));
// a的值为[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]

flatMap

1.定义 :是把map和flat结合,不过只展平一层。返回新数组。参数:
@params{callback},回调函数的参数为 elementindexarray
@params{this},this指向;

const list = arr.flatMap(item =>
item < 0 ? []:
item % 2 === 0 ? [item]:
[item - 1, 1]
)
console.log(list);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容