let arr = [
[1,2,2],
[3,4,5,5],
[6,7,8,9,[11,12,[12,13,[14]]]],
10
]
一、flat (ES6新增)
arr = arr.flat(2)
参数含义是扁平化层数 ,结果:[ 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, [ 12, 13, [ 14 ] ], 10 ]
可以看到没有完全扁平化,当我们不知道有多少层使,可以使用Infinity作为参数
arr = arr.flat(Infinity)
// [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
二、先转化为字符串
- 转普通字符串
arr = arr.toString().split(',').map(item => parseFloat(item))
数组转为字符串后,再转为逗号分隔的数组,此时数组内容为字符串类型,再转为数字类型。
- json字符串
arr = JSON.stringify(arr).replace(/(\[|\])/g,'').split(',').map(item => parseFloat(item))
先转为json字符串,利用正则把中括号过滤,剩余步骤同上
三、循环验证是否为数组
- while循环 + some 判断是否为数组,是就展开一级
while(arr.some(item => Array.isArray(item))){
arr = [].concat(...arr)
}
- 递归
~function () {
function myFlat() {
let result = [], _this = this
let fn = (arr) => {
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
if (Array.isArray(item)) {
fn(item)
continue
}
result.push(item)
}
}
fn(_this)
return result
}
Array.prototype.myFlat = myFlat
}()
arr = arr.myFlat()