Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #30283
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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