var arr = ['1', [2,3],4,[5,6,7,[8,9]]]
// 使用ES6新增的flat方法来实现
console.log(arr.flat(Infinity));
// 检测数组里面的元素是否包含数组 数组元素有数组就解构一层继续递归, 否则直接返回arr
function flat (arr) {
let flag = arr.some(item => Array.isArray(item))
return flag ? flat([].concat(...arr)) : arr
}
console.log(flat(arr));
// 利用循环递归的方式来实现
function myFlat() {
let result = []
function fn (arr) {
for (let i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])) {
fn(arr[i])
continue
}
result.push(arr[i])
}
}
fn(this)
return result
}
Array.prototype.myFlat = myFlat
console.log(arr.myFlat());
// 转为字符串在处理为
缺点:数组里面只能为数字
console.log(arr.toString().split(',').map(item => Number(item)));