Javascript中的空数组中的Concat
我浏览了一些代码,我想知道这有什么用处Javascript中的空数组中的Concat,javascript,arrays,Javascript,Arrays,我浏览了一些代码,我想知道这有什么用处 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)); // R
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)
会产生相同的结果
但是如果你想要一个扁平的数组,你的代码中需要有一个小小的改变,那就是你必须用网格将数组行,而不是
您正在推送一个包含行
本身的数组。如果行是数组(例如[0,1,2]
)。您将推送包含另一个数组的数组(即[[0,1,2]]
)
使用grid.push([].concat(行))
,您正在推送一个数组,该数组包含行中包含的元素(即[0,1,2]
)
但是,不清楚为什么它不仅仅是编写的grid.push(row)
,如果row
是一个数组,那么它可能看起来或多或少与grid.push([].concat(row))相同代码>
对此,我可以找到两种解释:
row
不是一个数组,而是一个“类似数组”的对象,[]使用concat(row)
对其进行转换(就像可以做的那样)
您的编码人员不希望推送行
,而是推送行的副本,以防止对原始行
进行任何进一步修改
检查我的变体:
let arr = [];
let tmp = [ 1, 2, '300$' ];
arr.push(...tmp);
只要是数组格式的console.log(b.push([a]),所有数组都可以为空代码>。。。(grid.push([row]);
)。这是OP在post中指定的方式。。我很好奇两者之间的区别…两者都会产生一个数组的数组…更好的办法是提供具有有效语法的可执行代码段,正如所讨论的那样…你的意思是b.concat(a)
和b.push(a)
还是OPs问题中提到的那些?我们正在处理OP提供的代码,对吗?我不关心你答案中提供的代码..好的。再看一眼,我就明白你说的了。让我更新答案,因为行
可能是一个基本值(或者根本不是数组)。
var canEmptyArray = [];
grid = [...(grid), ...(canEmptyArray), ...(row)];