Skip to content

Latest commit

 

History

History
59 lines (51 loc) · 1.18 KB

arrayToOne.md

File metadata and controls

59 lines (51 loc) · 1.18 KB

扁平化数组的几种方式

数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。

举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下:

var arr = [1, [2, [3, 4]]];
console.log(flatten(arr)) // [1, 2, 3, 4]
  • 递归
// 方法 1
function flatten(arr) {
    var result = [];
    for (var i = 0, len = arr.length; i < len; i++) {
        if (Array.isArray(arr[i])) {
            result = result.concat(flatten(arr[i]))
        }
        else {
            result.push(arr[i])
        }
    }
    return result;
}
  • toString
// 方法2
function flatten(arr) {
    return arr.toString().split(',').map(function(item){
        return + item
    })
}
  • reduce
// 方法3
function flatten(arr) {
    return arr.reduce(function(prev, next){
        return prev.concat(Array.isArray(next) ? flatten(next) : next)
    }, [])
}
  • ES6扩展运算符
// 方法4
function flatten(arr) {

    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
    }

    return arr;
}