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?
You want to use .concat
when you need to flatten the array and not have an array consisting of other arrays. Eg
var a = [1,2,3];
var b = [4];
Scenario 1
console.log(b.push(a));
// Result: [4, [1,2,3]]
Scenario 2
console.log(b.concat(a));
// Result: [4,1,2,3]
So both of your scenarios in an array of array. Since [].concat()
results in an array only, pushing both [row]
, [].concat(row)
has the same result.
But if you want a flattened array, there is a slight change needed in your code, that you have to .concat
the array row
with grid
and not .push
the result of concat to it, as shown in scenario 2
Check my variant:
let arr = [];
let tmp = [ 1, 2, '300$' ];
arr.push(...tmp);
var canEmptyArray = [];
grid = [...(grid), ...(canEmptyArray), ...(row)];
All arrays can be empty as long as it is in the array format
With grid.push([row]);
you are pushing an array containing the row
itself. If row is an array (eg [0, 1, 2]
). You will push an array containing another array (ie [[0, 1, 2]]
).
With grid.push([].concat(row));
, you are pushing an array containing the elements contained in row
(ie [0, 1, 2]
).
However it is unclear why it is not just written grid.push(row)
which, if row
is an array, could seem more or less the same as grid.push([].concat(row));
.
I can find two explanations for this:
row
is not an array but an "array-like" object and [].concat(row)
is used to convert it (just like Array.from
could do).
Your coder does not want to push row
but a copy of row instead that protected against any further modification of the original row
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.