定义一个flatten
函数,接收一个数组作为参数,返回一个新数组,新数组是原数组去扁平化的情况。如:
let array = [1, [2, [3, 4]]];
console.log(flatten(array)); // 打印 [1, 2, 3, 4]
不能使用array.flat
函数。
[].concat(...arr)
可以解析一层,如下:
var arr = [1, [2, [3, 4]]];
console.log([].concat(...arr)); // [1, 2, [3, 4]]
可以通过循环多层解析:
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
思路:使用reduce对数组的每一项进行遍历,可以使用concat
解析一层,如果当前项是数组则递归解析。
function flatten(arr) {
return arr.reduce(function(prev, next){
return prev.concat(Array.isArray(next) ? flatten(next) : next)
}, []);
}
思路:[1, [2, [3, 4]]].toString()
的结果是1,2,3,4
,可以通过toString后对字符串拆分,然后转化数字即可。
function flatten(arr) {
return arr.toString().split(',').map(item => +item);
}
注意:该方法只能处理纯数字的数组,不能数字和字符串共存的数组,如
[1, '1']
。