recorrer objects inputs array jquery arrays flatten

objects - jquery reduce array



¿Cómo aplanar la matriz en jQuery? (9)

Aquí se explica cómo puede usar jquery para aplanar matrices profundamente anidadas:

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

Devoluciones:

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

Aprovecha jQuery.map y jQuery.isArray .

¿Cómo simplemente aplanar matriz en jQuery? Yo tengo:

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

Y yo quiero:

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


Para aplanar recursivamente una matriz, puede usar la función Array.reduce nativa. No es necesario usar jQuery para eso.

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

Ejecutando

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

devoluciones

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


Puede usar jQuery.map :

callback (value, indexOrKey) La función para procesar cada elemento. El primer argumento para la función es el valor; el segundo argumento es el índice o clave de la matriz o propiedad del objeto. La función puede devolver cualquier valor para agregar a la matriz. Una matriz devuelta se aplanará en la matriz resultante . Dentro de la función, esto se refiere al objeto global (ventana).


Puede usar jQuery.map , que es el camino a seguir si tiene la biblioteca jQuery ya cargada.

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

Devoluciones

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


Puede usar Array.prototype.reduce que técnicamente no es jQuery, sino ES5 válido:

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);


Una vieja pregunta, lo sé, pero ...

Encontré que esto funciona, y es rápido:

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


Usa el poder de JavaScript:

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


Usa recursividad si tienes múltiples niveles:

flaten = function(flatened, arr) { for(var i=0;i<arr.length;i++) { if (typeof arr[i]!="object") { flatened.push(arr[i]); } else { flaten(flatened,arr[i]); } } return; } a=[1,[4,2],[2,7,[6,4]],3]; b=[]; flaten(b,a); console.log(b);


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<e.length;i++) { flatten(e[i],b); } } else { b.push(e); } } flatten(a,b); console.log(b);

La función aplanar debería hacerlo, y esto no requiere jQuery. Simplemente copie todo esto en Firebug y ejecútelo.