我正在浏览一些代码,想知道这个有什么用处。
grid.push([].concat(row));
在我看来,它与……相同。
grid.push([row]);
为什么要纠结于“concat”?
我正在浏览一些代码,想知道这个有什么用处。
grid.push([].concat(row));
在我看来,它与……相同。
grid.push([row]);
为什么要纠结于“concat”?
当您需要将数组展平并且不想得到由其他数组组成的数组时,您可以使用.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
函数将数组row
与grid
连接起来,而不是使用.push
将连接后的结果推入grid
数组中,如第二个场景所示。
console.log(b.push([a]));
... (grid.push([row]);
)。这是帖子中OP指定的方式。我很好奇它们之间的区别是什么。 - Rayonb.concat(a)
和b.push(a)
两者都包括,还是只针对OP的问题中提到的那些呢? - Aditya Singh请检查我的变量:
let arr = [];
let tmp = [ 1, 2, '300$' ];
arr.push(...tmp);
var canEmptyArray = [];
grid = [...(grid), ...(canEmptyArray), ...(row)];
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));
差不多。row
不是一个数组,而是一个“类似数组”的对象,[].concat(row)
用于将其转换(就像 Array.from
可以做的那样)。
你的程序员不想推送 row
,而是想要一个 row 的副本,以保护原始 row
免受任何进一步修改的影响。
row
可能是一个原始值(或者根本不是数组)。 - Amit