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.