将二维数组转换为交替其值的一维数组

rob*_*007 5 javascript arrays loops multidimensional-array

我有一个像这样的二维数组:

let test2d = [
  ["foo", "bar"],
  ["baz", "biz"]
]
Run Code Online (Sandbox Code Playgroud)

如果我想将这个2D数组转换为1D数组(不交替它们的值),我可以通过两种方式实现:

第一种方式:

let merged = test2d.reduce( (prev, next) => prev.concat(next) )
console.log(merged) // ["foo", "bar", "baz", "biz"]
Run Code Online (Sandbox Code Playgroud)

第二种方式:

let arr1d = [].concat.apply([], test2d)
console.log(arr1d) // ["foo", "bar", "baz", "biz"]
Run Code Online (Sandbox Code Playgroud)

问题:如何获得一维数组但其值交替出现?我的意思是这样的:

["foo", "baz", "bar", "biz"]
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 2

您可以为每个索引获取一个数组,并在末尾连接数组。

var array = [["foo", "bar"], ["baz", "biz"]],
    result = [].concat(...array.reduce((r, a) => {
        a.forEach((v, i) => (r[i] = r[i] || []).push(v));
        return r;
    }, []));

console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • 你可以编写两行代码:`r[i] = r[i] || [];` 和 `r[i].push(v)`。第一行检查“r[i]”是否为真,如数组,如果不是,则将数组作为赋值。第二个将项目推送到该数组。 (2认同)