将Javascript subArrays转换为一个Array

And*_*cas 4 javascript arrays

我有这个数组:

array = ['bla', ['ble', 'bli'], 'blo', ['blu']]
Run Code Online (Sandbox Code Playgroud)

我想要它

array = ['bla', 'ble', 'bli', 'blo', 'blu']
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的功能可以给我这个特定的结果?

dav*_*ave 16

你可以concat这样做:

array = [].concat.apply([], array)
Run Code Online (Sandbox Code Playgroud)

如果你需要递归(嵌套嵌套数组),我可能会这样做:

function flatten(arr, result) {
    if (typeof result === "undefined") {
        result = [];
    }
    for (var i = 0; i < length; i++) {
        if (Array.isArray(arr[i])) {
            flatten(arr[i], result);
        } else {
            result.push(arr[i]);
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • +1但这只适用于嵌套一层深度的数组.例如`['bla',['ble',['bli']],'blo',['blu']]`产生`['bla','ble',['bli'],'blo' ,'blu']` (3认同)

Bre*_*haw 7

有一个名为flat的新数组原型函数.目前,Microsoft浏览器和Samsung Internet不支持此功能.语法很简单:

array.flat([depth])
Run Code Online (Sandbox Code Playgroud)

depth是一个可选变量,用于指定要展平的图层数.默认值为1. 在此处阅读更多相关信息.


Som*_*Guy 4

编辑:请看看戴夫的答案或 pswg 的答案 - 他们是优越的。该代码很糟糕,不应使用(我无法删除已接受的答案)。

你可以这样做:

var arr = ['bla', ['ble', 'bli'], 'blo', ['blu']];
var newArr = arr.toString().split(',');
Run Code Online (Sandbox Code Playgroud)

演示

解释:

这很简单。toString()在包含数组的数组上创建一个包含顶层所有元素的字符串,因此[['abc']].toString()无论数组中的“深度”如何,结果都是“abc”。之后,您只需使用将获得的字符串拆分为数组String.prototype.split即可完成您的目标