乐趣区

关于javascript:js实现数组扁平化

扁平化

数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套能够是任何层数)转换为只有一层的数组。
例如

var arr = [1, [2, [3, 4,5]]]; 
 // [1, 2, 3, 4,5]

实现办法如下

递归

let a = [1, [2, [3, 4, 5]]];

function flatten(arr) {let result = []
    for (let i = 0; i < arr.length; i++) {
        // 如果元素是数组,数组的后果通过数组的 concat 办法拼接到最初要返回的 result 数组
        if (Array.isArray(arr[i])) {result = result.concat(flatten(arr[i]))
            console.log(result)
        } else {result.push(arr[i])
        }
    }
    return result
}

利用 reduce 函数迭代

function flatten(arr) {return arr.reduce((prev, next) => {
        // 判断逻辑和递归中要害判断逻辑代码相似
        return prev.concat(Array.isArray(next) ? flatten(next) : next)
    }, [])
}

利用扩大运算符

function flatten(arr) {
    //  只有 arr 数组中还存在数组元素,循环就持续进行
    while (arr.some(item => Array.isArray(item))) {
        // 开展数组,拼接空数组
        arr = [].concat(...arr)
    }
    return arr
}

split 和 toString() 办法独特解决

function flatten(arr) {// toString() 办法把数组转换为 1,2,3,4,5
    return arr.toString().split(",")
}

ES6 中 flat 办法

var newArray = arr.flat([depth])

depth 可选. 指定要提取嵌套数组的构造深度,默认值为 1。
返回值 . 一个蕴含将数组与子数组中所有元素的新数组。
Infinity 示意要始终开展

function flatten(arr) {return arr.flat(Infinity)
}

正则和 JSON 办法独特解决

function flatten(arr) {let str = JSON.stringify(arr);
  // 过滤所有的中中括号
  str = str.replace(/(\[|\])/g, '');
  str = '[' + str + ']';
  return JSON.parse(str); 
}

在线网站 https://regexper.com/ 能够把正则剖析成容易了解的可视化的逻辑脑图

退出移动版