如何将多维数组转换为单个数组?使用Javascript

时间:2018-06-18 21:48:57

标签: javascript arrays multidimensional-array flatten

任务:有人给你一个乱七八糟的数组!将此多维数组转换为单个数组。 我知道如何将二维数组转换为单个数组。 我如何将多维数组转换为单个数组?

我的2d数组有自己的数组。

例如,如果给你一个这样的数组,我怎么把整个数组转换成一个数组呢?

arr = [[1,[2]],[3,[4]],[5,[6]],[7,[8]]] ==> [1,2,3,4,5,6,7,8]

EX:

function mergeArrays(arr) {
  var inOne = arr.reduce(function(a,b) {
    return a.concat(b); // works well with 2-dimension, but not this problem.
  })
  return inOne;//output is [1,Array(1),3,Array(1),1,5,Array(1),2,7,Array(1),3]
} // I need just one array. like this => [1,2,3,4,5,6,7,8]

mergeArrays([[1,[2]],[3,[4]],[5,[6]],[7,[8]]]);

// should equal arr = [[1,[2]],[3,[4]],[5,[6]],[7,[8]]] => [1,2,3,4,5,6,7,8]

我想我要问的是你如何将任何维度的数组转换为单个数组。

我已经使用了concat和spread运算符,如果我正在处理一个二维数组,它会很好用,但如果我的二维数组有自己的数组则不行。

你会如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用递归和reduce来返回平面数组。



function mergeArrays(arr) {
  return arr.reduce((r, e) => r.concat(Array.isArray(e) ? mergeArrays(e) : e), [])
}

console.log(mergeArrays([[1,[2]],[3,[4]],[5,[6]],[7,[8]]]))