JS数组扁平化

35 阅读1分钟
  1. 递归
function flatten(arr) {
    var result = []
    function inFlatten(arr) {
        if(arr.__proto__ === Array.prototype) {
            for (var index = 0; index < arr.length; index++) {
                inFlatten(arr[index])
            }
        } else {
            result.push(arr)
        }
    }
    inFlatten(arr)
    return result
}

// ES6 
const flatten = (arr) => {
    let result = []
    arr.forEach(item => {
        if(Array.isArray(item)) {
            result = result.concat(flatten(item))
        } else {
            result.push(item)
        }
    });
    return result 
}
  1. toString
const flatten = (arr) => {
  // 传进来的是数字类型数组
	return arr.toString().split(',').map(item => +item)
}
  1. reduce
// reduce -- 一个挺强大的API
const flatten = (arr) => {
     return arr.reduce((prev, next) => {
         return prev.concat(Array.isArray(next) ? flatten(next): next)
     }, [])
}
  1. 扩展运算符(一层一层展开)
const flatten = (arr) => {
    while(arr.some(item => Array.isArray(item))){
        arr = [].concat(...arr);
    }
    return arr;
}