Come appiattire l’array in jQuery?

Come semplicemente appiattire l’array in jQuery? Io ho:

[1, 2, [3, 4], [5, 6], 7] 

E io voglio:

 [1, 2, 3, 4, 5, 6, 7] 

Puoi usare jQuery.map , che è la strada da percorrere se hai già caricato la libreria jQuery.

 $.map( [1, 2, [3, 4], [5, 6], 7], function(n){ return n; }); 

ritorna

 [1, 2, 3, 4, 5, 6, 7] 

Usa la potenza di JavaScript:

 var a = [[1, 2], 3, [4, 5]]; console.log( Array.prototype.concat.apply([], a) ); //will output [1, 2, 3, 4, 5] 

Ecco come puoi usare jquery per appiattire array profondamente annidati:

 $.map([1, 2, [3, 4], [5, [6, [7, 8]]]], function recurs(n) { return ($.isArray(n) ? $.map(n, recurs): n); }); 

Ritorna:

 [1, 2, 3, 4, 5, 6, 7, 8] 

Sfrutta jQuery.map e jQuery.isArray .

 var a = [1, 2, [3, 4], [5, [6, [7, 8]]]]; var b = []; function flatten(e,b){ if(typeof e.length != "undefined") { for (var i=0;i 

La funzione flatten dovrebbe farlo, e questo non richiede jQuery. Basta copiare tutto questo in Firebug ed eseguirlo.

Per appiattire ricorsivamente un array è ansible utilizzare la funzione nativa Array.reduce . Non è necessario usare jQuery per quello.

 function flatten(arr) { return arr.reduce(function flatten(res, a) { Array.isArray(a) ? a.reduce(flatten, res) : res.push(a); return res; }, []); } 

Esecuzione

 flatten([1, 2, [3, 4, [5, 6]]]) 

ritorna

 [ 1, 2, 3, 4, 5, 6 ] 

Puoi usare jQuery.map() :

callback (value, indexOrKey) La funzione per elaborare ogni elemento contro. Il primo argomento della funzione è il valore; il secondo argomento è l’indice o la chiave dell’array o della proprietà dell’object. La funzione può restituire qualsiasi valore da aggiungere all’array. Un array restituito verrà appiattito nella matrice risultante . All’interno della funzione, questo si riferisce all’object globale (finestra).

Puoi usare Array.prototype.reduce che tecnicamente non è jQuery, ma ES5 valido:

 var multidimensionArray = [1, 2, [3, 4], [5, 6], 7]; var initialValue = []; var flattened = multidimensionArray.reduce(function(accumulator, current) { return accumulator.concat(current); }, initialValue); console.log(flattened); 

Vecchia domanda, lo so, ma …

Ho trovato che funziona, ed è veloce:

 function flatten (arr) { b = Array.prototype.concat.apply([], arr); if (b.length != arr.length) { b = flatten(b); }; return b; } 

Usa la ricorsione se hai più livelli:

 flaten = function(flatened, arr) { for(var i=0;i