Javascript中在空数组中进行拼接(Concat)

15

我正在浏览一些代码,想知道这个有什么用处。

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

在我看来,它与……相同。

grid.push([row]);

为什么要纠结于“concat”?


1
因为 row 可能是一个原始值(或者根本不是数组)。 - Amit
4个回答

19

当您需要将数组展平并且不想得到由其他数组组成的数组时,您可以使用.concat。例如:

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函数将数组rowgrid连接起来,而不是使用.push将连接后的结果推入grid数组中,如第二个场景所示。


console.log(b.push([a]));... (grid.push([row]);)。这是帖子中OP指定的方式。我很好奇它们之间的区别是什么。 - Rayon
两者都会生成一个数组的数组...最好提供可执行的代码片段,其中包含问题中提供的有效语法... - Rayon
你的意思是指b.concat(a)b.push(a)两者都包括,还是只针对OP的问题中提到的那些呢? - Aditya Singh
我们正在处理 OP 提供的代码,对于你回答中提供的代码我不关心。 - Rayon
1
好的。仔细看了一下,我明白你在说什么了。让我更新一下答案。 - Aditya Singh

9

请检查我的变量:

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

1
var canEmptyArray = [];
grid = [...(grid), ...(canEmptyArray), ...(row)];

所有的数组只要符合数组格式,都可以为空。

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 的副本,以保护原始 row 免受任何进一步修改的影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接