flat
- 定义:展平数组,默认展平一层,传入参数
depth
则展平depth
层,返回展平后的数组,不改变原数组。
const arr1 = [0, 1, 2, [3, 4]];
arr1.flat() // [0, 1, 2, 3, 4]
- 使用
Infinity
,可展开任意深度的嵌套数组。 - 使用
flat
方法会移出数组中的空项。
[1, , 3, 4, , 6].flat() // [1, 3, 4, 6]
Array(3).flat() // []
- 实现
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
- 不改变原数组,对原数组数组中的每个元素都调用一次回调函数作为新数组元素,返回新数组。参数:
@params{callback},回调函数的参数为element
,index
,array
;
@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},回调函数的参数为 element
, index
, array
;
@params{this},this指向;
const list = arr.flatMap(item =>
item < 0 ? []:
item % 2 === 0 ? [item]:
[item - 1, 1]
)
console.log(list);