数组扁平化概念
数组扁平化是指将一个多维数组变为一维数组
实现
reduce
遍历数组每一项,若值为数组则递归遍历,否则concat。
let arr = [1,2,[3,4,[5,6,[7,8]]]];
function flatten(arr) {
return arr.reduce((result, item)=> {
return result.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}
console.log(flatten(arr));// [1, 2, 3, 4, 5, 6, 7, 8]
二维数组
// 二维数组
let arr = [1,2,[3,4],[5,6]];
function arrFun(arr) {
return [].concat(...arr);
}
console.log(arrFun(arr));// [1, 2, 3, 4, 5, 6]
多维数组
// 多维数组
let arr = [1,2,[3,4,[5,6,[7,8]]]];
function arrFun(arr) {
let res = [];
for (let i = 0,len=arr.length; i < len; i++) {
if ( Array.isArray(arr[i]) ) {
res = res.concat(arrFun(arr[i]));
}else{
res.push(arr[i]);
}
}
return res;
}
console.log(arrFun(arr));// [1, 2, 3, 4, 5, 6, 7, 8]
toString & split
调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组
因为split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型
let arr = [1,2,[3,4,[5,6,[7,8]]]];
let sarr = arr.toString().split(',');
// ["1", "2", "3", "4", "5", "6", "7", "8"]
function flatten(arr) {
return arr.toString().split(',').map(function(item) {
return Number(item);
})
}
console.log(flatten(arr));
// [1, 2, 3, 4, 5, 6, 7, 8]
join & split
和上面的toString一样,join也可以将数组转换为字符串
function flatten(arr) {
return arr.join(',').split(',').map(function(item) {
return parseInt(item);
})
}