Quiero enviar una cantidad x de elementos de la matriz a otra matriz con la condición de que la cantidad máxima de elementos que se enviarán sea la diferencia de maxPushLimit (que es 720) y ya alreadyPushed (por lo que si alreadyPushed es, digamos, 300, solo 420 pueden ser empujado)
Condiciones especiales:
alreadyPushed desde la array1 es > la longitud total de la array2 , ignore la última diferencia (los últimos x elementos que quedan de la array2 .alreadyPushed de array1 es <longitud total de array2 , el último índice de array1 tendría redundancia (no sería 720, digamos, 710 si la diferencia es 10). const array1 = [ { id: 1, alreadyPushed: 500, }, { id: 2, alreadyPushed: 600, }, { id: 3, alreadyPushed: 700, }, { id: 4, alreadyPushed: 720, }, ]; const array2 = []; for (let i = 1; i < 361; i++) { array2.push(i); } const maxPushLimit = 720; let results = []; let array2Index = 0; for (let i = 0; i < array1.length; i++) { const array1Item = array1[i]; const limit = maxPushLimit - array1Item.alreadyPushed; console.log(limit); if (limit <= 0) { continue; } else { array1Item.array2Items = array2.slice(array2Index, limit); array2Index += limit; results.push(array1Item); } } console.log(results); Tenga en cuenta que el orden de alreadyPushed no es importante (500, 600, 700, 720 son totalmente aleatorios)
Quiero que el resultado final se vea así:
[ { id: 1, alreadyPushed: 500, array2Items: { // 220 array2Items } }, { id: 2, alreadyPushed: 600, array2Items: { // 120 array2Items } }, { id: 3, alreadyPushed: 700, array2Items: { // 20 array2Items } }, ];Lo que estoy recibiendo:
[ { id: 1, alreadyPushed: 500, array2Items: [ // 220 array2Items ] }, { id: 2, alreadyPushed: 600, array2Items: [] }, { id: 3, alreadyPushed: 700, array2Items: [] } ]El problema es la operación de corte. Debería ser array2.slice(array2Index, array2Index + limit); .
El problema está en esta expresión:
array2.slice(array2Index, limit);El segundo argumento no debe ser el tamaño del segmento, sino el índice final del segmento.
Así que cambia a:
array2.slice(array2Index, array2Index + limit);