blog icon indicating copy to clipboard operation
blog copied to clipboard

javascript多维数组扁平化

Open ly2011 opened this issue 8 years ago • 0 comments

下面是将多位数组转化为单一数组的三种不同方法: 对于此数组:

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];

我们需要的结果是:


[1, 2, 3, 4, 5, 6, 7, 8, 9]

  • 解决方案1: 使用 concat()apply()
var myNewArray = [].concat.apply([], myArray)
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 解决方案2:使用 reduce()

var myNewArray = myArray.reduce(function (prev, curr) {
  return prev.concat(curr)
})
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

  • 解决方案3: for循环

var myNewArray3 = [];
for (var i = 0; i < myArray.length; ++i) {
  for (var j = 0; j < myArray[i].length; ++j)
    myNewArray3.push(myArray[i][j]);
}
console.log(myNewArray3);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

  • 解决方案4: 使用es6的展开运算符

var myNewArray4 = [].concat(...myArray)
console.log(myNewArray4)
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 解决方案5: 使用es6自带的flat
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// 使用 Infinity 作为深度,展开任意深度的嵌套数组
arr3.flat(Infinity);

对于无限嵌套的数组请使用 Lodash 的 flattenDeep()

ly2011 avatar Jul 18 '17 04:07 ly2011