Tengo una matriz de tuplas de coordenadas como
[ [ 1, 1 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ], [ 6, 6 ], [ 7, 7 ], [ 8, 8 ], [ 9, 9 ], [ 10, 10 ] ...Quiero extraer cada 5 coordenadas de ellos en una nueva matriz
Aquí está mi implementación
const coordinates = Array.from({ length: 30 }, (_, i) => [i + 1, i + 1]) const { filteredCoordinates } = coordinates.reduce( (accu, currCoordinate) => { if (accu.count === 5) { accu.filteredCoordinates.push(currCoordinate) accu.count = 1 } else { accu.count += 1 } return accu }, { count: 1, filteredCoordinates: [], } ) console.log(filteredCoordinates);Esto funciona bien, pero me pregunto si hay una mejor manera de hacerlo.
Puede tomar un índice e incrementarlo según el conteo deseado.
Este enfoque no itera la matriz completa, solo los índices deseados.
const coordinates = Array.from({ length: 30 }, (_, i) => [i + 1, i + 1]), filtered = []; for (let i = 4; i < coordinates.length; i += 5) filtered.push(coordinates[i]); console.log(filtered); .as-console-wrapper { max-height: 100% !important; top: 0; }Puede filtrar la matriz según el módulo de cinco dado el índice.
const coordinates = Array.from({ length: 30 }, (_, i) => [i + 1, i + 1]) const everyFithCoordinate = coordinates.filter((_, i) => (i+1) % 5 === 0); console.log(everyFithCoordinate);Quiero extraer cada 5 coordenadas de ellos en una nueva matriz
Dependiendo de su definición de "extraer", es posible que desee mover esas coordenadas de la primera a la segunda matriz. Este ejemplo utiliza una for statement . Guardo en caché la longitud, y luego splice la coordenada de la matriz en el índice dado, y la inserto en la nueva matriz. Luego disminuya tanto la longitud como el índice porque han cambiado antes de la siguiente iteración.
const coordinates = Array.from({ length: 32 }, (_, i) => [i + 1, i + 1]); const out = []; const count = 5; let { length } = coordinates; for (let i = count - 1; i < length; i += count) { out.push(coordinates.splice(i, 1)[0]); --length; --i; } console.log(JSON.stringify(out)); console.log(JSON.stringify(coordinates));