Podemos crear una array de elementos desagrupando los elementos en una array producida por zip usando diferentes métodos en JavaScript como Math.max() y métodos específicos de la array, a saber , Array.prototype.map() , Array.prototype.reduce( ) y Array.prototype.forEach() . Esta operación también se puede denominar descomprimir .
Antes de ver unzip , comprendamos qué hace zip . Zip crea una array de elementos, agrupados según su posición en las arrays originales. Para lograr esto, podemos hacer uso de métodos JavaScript como Math.max() , Array.from() y Array.prototype.map() .
Acercarse:
- Math.max(): para obtener la array más larga de todas las arrays de argumentos.
- Luego, cree una array con esa longitud como valor de retorno y use Array.from() con una función de mapeo para crear una array de elementos agrupados.
- Array.prototype.map(): Para convertir cada elemento de la array en una nueva array.
- Además, el operador de propagación (…) se usa para representar un número variable de arrays que se pueden pasar como argumentos en el campo de parámetro de la función zip .
Ejemplo:
Javascript
const zip = (...arrays) => { const maxLength = Math.max( ...arrays.map(arr => arr.length)); return Array.from({ length: maxLength }) .map((_, i) => { return Array.from( {length: arrays.length }, (_, j) => arrays[j][i]); }); }; console.log( zip( [1, "GFG", 0.1], [2, "GeeksForGeeks", 0.2], [3, "Geeks", 0.3], [4, "For", 0.4], [5, "Geeks", 0.5] ) );
Producción:
Ahora veamos cómo podemos implementar unzip :
- Math.max(): Obtenga el subarreglo más largo en el arreglo.
- Array.prototype.map(): convierte cada elemento de la array en una array.
- Array.prototype.reduce() y Array.prototype.forEach(): Asigne los valores agrupados a arrays individuales.
- Por último, Array.prototype.map() y el operador de propagación (…) se utilizan para aplicar el parámetro f en la función de descomprimir a cada grupo individual de elementos.
Ejemplo:
Javascript
const unzip = (arr, f) => arr.reduce( (a, myValue) => (myValue.forEach( (val, i) => a[i].push(val)), a), Array.from({ length: Math.max( ...arr.map(myArr => myArr.length)), }).map(myArr => []) ) .map(v => f(...v)); console.log( unzip( [ [1, 3, 5], [2, 6, 10], [3, 9, 15], ], (...arguments) => arguments .reduce((acc, j) => acc + j, 0) ) );
Producción:
Publicación traducida automáticamente
Artículo escrito por rajatsandhu2001 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA