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?
答案 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));
或多或少相同。
我可以找到两个解释:
row
不是数组,而是"类似数组"对象和[].concat(row)
用于转换它(就像Array.from
可以做的那样)。
您的编码员不想推送row
,而是推送行副本,以防止原始row
的任何进一步修改。
答案 3 :(得分:0)
检查我的版本:
let arr = [];
let tmp = [ 1, 2, '300$' ];
arr.push(...tmp);