Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的空数组中的Concat_Javascript_Arrays - Fatal编程技术网

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)];