2013-02-01 8 views
9

Voglio concatenare due array in uno. Ho trovato due funzioni possono fare il lavoro; uno è jQuery.merge() e l'altro è il JavaScript incorporato nella funzione concat(). Sembrano fare la stessa cosa, e ho trovato this. Dice: "Unisci crea un ingombro minore perché scorre attraverso l'array originale e aggiunge i nuovi elementi: Concat è una funzione Javascript integrata e dovrebbe essere più veloce, ma ha un ingombro maggiore". Non sono sicuro che questa affermazione sia vera e ci sono altre differenze?Qual è la differenza di bewteen jQuery.merge() e della funzione nativa JavaScript concat()?

+1

Una differenza è che la funzione $ .merge() è distruttiva. Altera il primo parametro per aggiungere gli oggetti dal secondo. concat() no. Crea una nuova matrice. – j08691

risposta

10

Quella citazione è giusta e le due funzioni in realtà non fanno la stessa cosa, si uniscono due array in uno (primo parametro), e il secondo crea un nuovo array da entrambi.

Il "footprint" a cui si riferisce è la quantità massima di memoria che sarà in uso in qualsiasi momento. Poiché si fondono, si sta solo duplicando il secondo array, si dovrebbe usare meno memoria, poiché in qualsiasi momento, avrà solo bisogno di avere 2 array in memoria.

La funzione incorporata dovrà disporre di 3 matrici e il nuovo array dovrà avere le dimensioni di entrambi gli array concatenati.

Supponendo 1000 elementi di matrice A e B, e l'array fuso come C:

  • unione dovrebbe 1000 + 1000 [a-> c] e 1000 [b] o 3000 punti.
  • Concat avrebbe bisogno di 1000 + 1000 [c] e 1000 [a] e 1000 [b] o 4000 punti.

Meno memoria potrebbe essere più veloce se c'era molta memoria in uso, meno movimenti potrebbero essere anche più veloci.

Some tests I found

+0

http://jsperf.com/arrays-jquery-merge-vs-concat –

1

Nella situazione tmaster, ha usato jQuery.merge() per unire 2 arrays.Actually, JQuery.merge può usato per unire jQuery (in jQuery oggetto ha lunghezza prop troppo) con Array.Here è jQuery .merge() 's codice:

merge: function(first, second) { 
    var len = +second.length, 
     j = 0, 
     i = first.length; 

    for (; j < len; j++) { 
     first[ i++ ] = second[ j ]; 
    } 

    first.length = i; 

    return first; 
}, 

Così per oggetto JQuery ha proprietà di lunghezza, è possibile utilizzare merge per copiare il secondo oggetto attr JQuery come 0,1 al primo JQuery oggetto .Qui è un esempio:

pushStack: function(elems) { 

    // Build a new jQuery matched element set 
    var ret = jQuery.merge(this.constructor(), elems); 

    ... 

    return ret; 
}, 

this.constructor() restituisce un oggetto jQuery, anche elem. Ma concat non può, che può essere usato solo con Array.Questo è diff tra concat e JQuery.merge, anche.

+0

Suppongo che sia possibile concatenare anche elementi tipo array ... – deostroll

Problemi correlati