Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #30283

Re: duplicator an array

From Stefan Weiss <krewecherl@gmail.com>
Newsgroups comp.lang.javascript
Subject Re: duplicator an array
Date 2016-04-16 14:27 +0200
Organization albasani.net
Message-ID <netb2m$42n$1@news.albasani.net> (permalink)
References <ea578169-9d58-4249-91b4-e0cbad5a6fd8@googlegroups.com> <nen4e4$ggn$1@dont-email.me>

Show all headers | View raw


Aleksandro wrote:
> On 13/04/16 22:27, JRough wrote:
>> var arr =[1,2,3,4,5];
>> function duplicator(arr){
>>     return  arr.concat(arr.slice(0));
>> }
>> var res = duplicator(arr);

...

> Try:
> 
> Array.prototype.duplicate = function ()
> {
> 	this.push.apply(this, this.slice(0))
> }

Note that this is not equivalent to OP's function.

1) push() modifies the original array, concat() does not.

2) It handles sparse arrays badly:

    "use strict";

    let a = [0,,,,4],
        b = a.slice(0);

    dir(a, "a");
    dir(b, "b");
    dir(a.concat(b), "concat()");
    a.push.apply(a, b);
    dir(a, "push() applied");

    function dir (arr, label)
    {
        console.log(label + ":");
        for (let i in arr) console.log(`  [${i}] = ${arr[i]}`);
    }

Output:

    a:
      [0] = 0
      [4] = 4
    b:
      [0] = 0
      [4] = 4
    concat():
      [0] = 0
      [4] = 4
      [5] = 0
      [9] = 4
    push() applied:
      [0] = 0
      [4] = 4
      [5] = 0
      [6] = undefined
      [7] = undefined
      [8] = undefined
      [9] = 4

This is because apply() fills in `undefined` for missing parameters.


By the way, ES2015 introduced the spread operator `...`.
With this operator, you can also write

    this.push(...this.slice(0))

instead of

    this.push.apply(this, this.slice(0))


-- stefan

Back to comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

duplicator an array JRough <janis.rough@gmail.com> - 2016-04-13 18:27 -0700
  Re: duplicator an array Aleksandro <aleksandro@gmx.com> - 2016-04-14 01:00 -0300
    Re: duplicator an array JRough <janis.rough@gmail.com> - 2016-04-14 09:53 -0700
    Re: duplicator an array "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-04-14 19:41 +0200
      Re: duplicator an array Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-04-14 22:09 +0200
        Re: duplicator an array Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-04-14 22:23 +0200
    Re: duplicator an array Stefan Weiss <krewecherl@gmail.com> - 2016-04-16 14:27 +0200
      Re: duplicator an array Joao Rodrigues <jr@none.com> - 2016-04-16 12:01 -0300
        Re: duplicator an array Joao Rodrigues <jr@none.com> - 2016-04-16 13:43 -0300
      Re: duplicator an array Aleksandro <aleksandro@gmx.com> - 2016-04-16 14:13 -0300
  Re: duplicator an array bharat.bandgar009@gmail.com - 2017-05-03 01:33 -0700

csiph-web