Concat in an empty array in Javascript

时间:2016-05-27 07:34:35

标签: javascript arrays

I was browsing through some code and I was wondering how this could be useful

grid.push([].concat(row));

In my understanding it is the same as

grid.push([row]);

Why the 'concat' fuss?

4 个答案:

答案 0 :(得分:9)

当您需要展平数组并且没有包含其他数组的数组时,您希望使用.concat。 E.g。

var a = [1,2,3];
var b = [4];

情景1

console.log(b.push(a));
// Result: [4, [1,2,3]]

场景2

console.log(b.concat(a));
// Result: [4,1,2,3]

所以你的两个场景都在一个数组数组中。由于[].concat()仅生成数组,因此同时推送[row][].concat(row)会产生相同的结果。

但是如果你想要一个扁平数组,那么你的代码需要稍作修改,你需要.concat数组row grid而不是.push concat的结果,如方案2所示

答案 1 :(得分:1)

Splitten der Funktion: [1, -, (, -2, *, -1, ), -, 3]

所有数组可以为空,只要是数组格式

答案 2 :(得分:0)

使用grid.push([row]);,您正在推送一个包含row本身的数组。如果row是一个数组(例如[0, 1, 2])。您将推送包含另一个数组的数组(即[[0, 1, 2]])。

使用grid.push([].concat(row));,您推送的数组包含row中包含的元素(即[0, 1, 2])。

然而,目前尚不清楚为什么不只是写grid.push(row),如果row是一个数组,它可能与grid.push([].concat(row));或多或少相同。

我可以找到两个解释:

  1. row不是数组,而是"类似数组"对象和[].concat(row)用于转换它(就像Array.from可以做的那样)。

  2. 您的编码员不想推送row,而是推送行副本,以防止原始row的任何进一步修改。

答案 3 :(得分:0)

检查我的版本:

let arr = [];
let tmp = [ 1, 2, '300$' ];
arr.push(...tmp);