我想创建一个函数,该函数接受数组和文字(或对象)的数组,并将其展平为一维数组。例如,有效输入将为[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]]));
答案 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]]))
答案 1 :(得分:2)
处理代码:将单个元素包装到数组中没有任何意义,.concat
将正确处理它们,换句话说:
[1].concat([2], 2)
工作正常,无需将2
包装到[2]
中。这会将您的代码变成一个单一的代码。