Javascript,数组扁平化,多维数组展开,reduce,some,apply,join, split,flattenArray
Javascript 多为数组扁平化
原数组
let arr = [0, [1, [2, 3, [4, [5, 6]], 7]], [8, 9]];
01 循环和递归
function flattenArray(arr) {
let ans = [];
for (let i = 0; i < arr.length; ++i) {
if (Array.isArray(arr[i])) {
// 写法 01
ans.push.apply(ans, flattenArray(arr[i]));
// 写法 02
ans = ans.concat(flattenArray(arr[i]));
} else {
ans.push(arr[i]);
}
}
return ans;
}
console.log(flattenArray(arr)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
02 reduce 方法
function flattenArray(arr) {
return arr.reduce((ans, item) => {
return ans.concat(Array.isArray(item) ? flattenArray(item) : item);
}, []);
}
console.log(flattenArray(arr)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
03 apply 和 some 方法
function flattenArray(arr) {
// arr.some 方法返回是否有满足条件(函数标识)的元素
while (arr.some(item => Array.isArray(item))) {
arr = [].concat.apply([], arr);
}
return arr;
}
console.log(flattenArray(arr)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
04 join 和 split 方法
function flattenArray(arr) {
// join 方法可返回一个数组元素组成的字符串(默认以 ',' 隔开),无论数组多少维
// split 方法返回的数组的成员都是字符串
// map 方法可以对数组的每个元素转换成 Number 类型(方法有多种),返回修改后的新数组
return arr.join().split(',').map(item => item - 0);
}
console.log(flattenArray(arr)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]