将Javascript子数组转换为一个数组[重复]

n3h0vuf2  于 2023-04-19  发布在  Java
关注(0)|答案(4)|浏览(159)

此问题已在此处有答案

Merge/flatten an array of arrays(85个回答)
4年前关闭。
我有这个数组:

array = ['bla', ['ble', 'bli'], 'blo', ['blu']]

我希望它是

array = ['bla', 'ble', 'bli', 'blo', 'blu']

有没有一个简单的函数可以给予这个特定的结果?

brtdzjyr

brtdzjyr1#

2020年更新:
您现在可以在所有现代浏览器中使用.flat()
var newArray = arr.flat([depth])

let result = ['bla', ['ble', 'bli'], 'blo', ['blu']].flat()
console.log(result);
result = ['bla', ['ble', ['bli', ['bom']]], 'blo', ['blu']].flat()
console.log(result);
result = ['bla', ['ble', ['bli', ['bom']]], 'blo', ['blu']].flat(2)
console.log(result);
result = ['bla', ['ble', ['bli', ['bom']]], 'blo', ['blu']].flat(Infinity)
console.log(result);

您可以使用concat来执行以下操作:

array = [].concat.apply([], array)

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

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;
}
ewm0tg9j

ewm0tg9j2#

有一个新的数组原型函数叫做***flat***,目前微软浏览器和三星互联网都不支持这个函数,语法很简单:

array.flat([depth])
  • depth* 是一个可选变量,用于指定要展平的图层数量。默认值为1。在这里阅读更多信息。
qv7cva1a

qv7cva1a3#

**编辑:**请看Dave的答案或p. s.w. g的答案-他们是上级的。这段代码是可怕的,不应该被使用(我不能删除一个接受的答案)。

你可以这样做:

var arr = ['bla', ['ble', 'bli'], 'blo', ['blu']];
var newArr = arr.toString().split(',');

Demo
说明:
这很简单。toString()在一个包含数组的数组上创建一个字符串,其中所有元素都在顶层,因此[['abc']].toString()的结果是'abc',而不管它在数组中有多“深”。之后,您只需使用String.prototype.split将得到的字符串拆分为一个数组,就完成了目标

jv2fixgn

jv2fixgn4#

已经提供的其他答案是好的,但这里是我的递归方法的实现,它将扁平化任意嵌套到任何深度的数组:

var flatten = function(arr) {
    var out = [];
    for(var i = 0; i < arr.length; i++) {
        out.push.apply(out, Array.isArray(arr[i]) ? flatten(arr[i]) : [ arr[i] ]);
    }

    return out;
};

Demonstration
请注意,这依赖于Array.isArray,它可能在旧的浏览器中不可用。如果这是一个问题,您可以用另一个数组测试来替换它(例如arr[i].constructor == Array

相关问题