Concat in an empty array in Javascript

后端 未结 4 1179
再見小時候
再見小時候 2021-02-20 08:24

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<

相关标签:
4条回答
  • 2021-02-20 08:30
    var canEmptyArray = [];
    grid = [...(grid), ...(canEmptyArray), ...(row)];
    

    All arrays can be empty as long as it is in the array format

    0 讨论(0)
  • 2021-02-20 08:37

    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

    0 讨论(0)
  • 2021-02-20 08:38

    Check my variant:

    let arr = [];
    let tmp = [ 1, 2, '300$' ];
    arr.push(...tmp);
    
    0 讨论(0)
  • 2021-02-20 08:41

    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:

    1. row is not an array but an "array-like" object and [].concat(row) is used to convert it (just like Array.from could do).

    2. Your coder does not want to push row but a copy of row instead that protected against any further modification of the original row.

    0 讨论(0)
提交回复
热议问题