数组扁平化就是将多维的数组转换成一维数组,比如将 [[1,2,3,[4,5,6,[7,8]]],[9,10],[11,12,[13]],5]
扁平化后就是 [1,2,3,4,5,6,7,8,9,10,11,12,13,5]
代码实现:
function flattening(arr){
//1、将数组转换成以逗号分割的字符串
arr = arr.toString()
// console.log(arr); //'1,2,3,4,5,6,7,8,9,10,11,12,13,5'
//2、将字符串转换成数组
arr = arr.split(',')
// console.log(arr); //['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '5']
//3、将数组的每一项转换成数字类型
arr = arr.map(function(item){
return Number(item)
})
return arr
}
var arr = [[1,2,3,[4,5,6,[7,8]]],[9,10],[11,12,[13]],5]
console.log(flattening(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5]
优化上述代码:
function flattening(arr){
return arr.toString().split(',').map(function(item){
return Number(item)
})
}
var arr = [[1,2,3,[4,5,6,[7,8]]],[9,10],[11,12,[13]],5]
console.log(flattening(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5]
我们还可以直接使用数组扁平化方法flat()
:
flat()
方法可以传入参数 n 或者 Infinity:
n:扁平化 n 层
Infinity:扁平化到最深层次,就是直接把数组转成一维
var arr = [[1,2,3,[4,5,6,[7,8]]],[9,10],[11,12,[13]],5]
//扁平化一层
console.log(arr.flat(1)); //[ 1, 2, 3, [ 4, 5, 6, [ 7, 8 ] ], 9, 10, 11, 12, [ 13 ], 5 ]
//扁平化到最深层,即转成一维数组
console.log(arr.flat(Infinity)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5]