展平Array <Array <T>的最有效方法T>在JavaScript中

时间:2019-08-13 10:53:22

标签: javascript arrays ecmascript-5

我想创建一个函数,该函数接受数组和文字(或对象)的数组,并将其展平为一维数组。例如,有效输入将为[5, [2, 3], 7, [9, 0, 1]],而该输入的输出应为[5, 2, 3, 7, 9, 0, 1]

这是我到目前为止的代码。它没有任何问题,我只想确保它尽可能高效(它还需要与es5兼容)。

function flattenArray(list) {
  var result = [];
  for (var index = 0; index < list.length; index++) {
    result.push(list[index] instanceof Array ? list[index] : [list[index]]);
  }
  return [].concat.apply([], result);
}

console.log(flattenArray([5, [2, 3], 7, [9, 0, 1]]));

2 个答案:

答案 0 :(得分:2)

简单地使用Array.flat

function flattenArray(list) {
  return list.flat()
}

console.log(flattenArray([5, [2, 3], 7, [9, 0, 1]]));

这似乎是第二快的(基于下面的测试链接)并且与ES5兼容

console.log([].concat.apply([],[5, [2, 3], 7, [9, 0, 1]]))

Performace test

答案 1 :(得分:2)

处理代码:将单个元素包装到数组中没有任何意义,.concat将正确处理它们,换句话说:

  [1].concat([2], 2)

工作正常,无需将2包装到[2]中。这会将您的代码变成一个单一的代码。