数组扁平化就是将数组元素和子数组元素合并成新数组并且返回。
遍历递归
遍历数组,并且判断子元素是否是一个数组:
var a = [1, [54, [43, 42, 5]]];
function flatten(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
console.log(flatten(a)); //[ 1, 54, 43, 42, 5 ]
reduce
reduce本来是用来求和的,我们可以设置默认值为一个空数组,再通过concat方法来拼接数组元素:
function flatten(arr) {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? flatten(next) : next);
}, [])
}
console.log(flatten(a))
…扩展运算符
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
toString和split
先将数组转化为string,再次分割为数组
function flatten(arr) {
return arr.toString().split(',')
}
ES6的flat
function flatten(arr) {
return arr.flat(Infinity)
}
通过正则和JSON
function flatten(arr) {
let str = JSON.stringify(arr);
str = str.replace(/(\[|\])/g, '');
str = '[' + str + ']';
return JSON.parse(str);
}
这几个方法都可实现数组扁平化。