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<
var canEmptyArray = [];
grid = [...(grid), ...(canEmptyArray), ...(row)];
All arrays can be empty as long as it is in the array format
You want to use .concat
when you need to flatten the array and not have an array consisting of other arrays. E.g.
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);
With grid.push([row]);
you are pushing an array containing the row
itself. If row is an array (e.g. [0, 1, 2]
). You will push an array containing another array (i.e. [[0, 1, 2]]
).
With grid.push([].concat(row));
, you are pushing an array containing the elements contained in row
(i.e. [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
.