How to extend an existing JavaScript array with another array, without creating a new array

后端 未结 16 1897
深忆病人
深忆病人 2020-11-22 07:38

There doesn\'t seem to be a way to extend an existing JavaScript array with another array, i.e. to emulate Python\'s extend method.

I want to achieve th

相关标签:
16条回答
  • 2020-11-22 08:09

    Update 2018: A better answer is a newer one of mine: a.push(...b). Don't upvote this one anymore, as it never really answered the question, but it was a 2015 hack around first-hit-on-Google :)


    For those that simply searched for "JavaScript array extend" and got here, you can very well use Array.concat.

    var a = [1, 2, 3];
    a = a.concat([5, 4, 3]);
    

    Concat will return a copy the new array, as thread starter didn't want. But you might not care (certainly for most kind of uses this will be fine).


    There's also some nice ECMAScript 6 sugar for this in the form of the spread operator:

    const a = [1, 2, 3];
    const b = [...a, 5, 4, 3];
    

    (It also copies.)

    0 讨论(0)
  • 2020-11-22 08:09

    You can do that by simply adding new elements to the array with the help of the push() method.

    let colors = ["Red", "Blue", "Orange"];
    console.log('Array before push: ' + colors);
    // append new value to the array
    colors.push("Green");
    console.log('Array after push : ' + colors);

    Another method is used for appending an element to the beginning of an array is the unshift() function, which adds and returns the new length. It accepts multiple arguments, attaches the indexes of existing elements, and finally returns the new length of an array:

    let colors = ["Red", "Blue", "Orange"];
    console.log('Array before unshift: ' + colors);
    // append new value to the array
    colors.unshift("Black", "Green");
    console.log('Array after unshift : ' + colors);

    There are other methods too. You can check them out here.

    0 讨论(0)
  • 2020-11-22 08:10

    Another solution to merge more than two arrays

    var a = [1, 2],
        b = [3, 4, 5],
        c = [6, 7];
    
    // Merge the contents of multiple arrays together into the first array
    var mergeArrays = function() {
     var i, len = arguments.length;
     if (len > 1) {
      for (i = 1; i < len; i++) {
        arguments[0].push.apply(arguments[0], arguments[i]);
      }
     }
    };
    

    Then call and print as:

    mergeArrays(a, b, c);
    console.log(a)
    

    Output will be: Array [1, 2, 3, 4, 5, 6, 7]

    0 讨论(0)
  • 2020-11-22 08:11

    You can create a polyfill for extend as I have below. It will add to the array; in-place and return itself, so that you can chain other methods.

    if (Array.prototype.extend === undefined) {
      Array.prototype.extend = function(other) {
        this.push.apply(this, arguments.length > 1 ? arguments : other);
        return this;
      };
    }
    
    function print() {
      document.body.innerHTML += [].map.call(arguments, function(item) {
        return typeof item === 'object' ? JSON.stringify(item) : item;
      }).join(' ') + '\n';
    }
    document.body.innerHTML = '';
    
    var a = [1, 2, 3];
    var b = [4, 5, 6];
    
    print('Concat');
    print('(1)', a.concat(b));
    print('(2)', a.concat(b));
    print('(3)', a.concat(4, 5, 6));
    
    print('\nExtend');
    print('(1)', a.extend(b));
    print('(2)', a.extend(b));
    print('(3)', a.extend(4, 5, 6));
    body {
      font-family: monospace;
      white-space: pre;
    }

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