Digamos que tengo estas dos matrices
steps = [0, 2, 4, 6, 8, 10, 12, 15, 20, 25, 30, 35, 40, 45, 50] nums = [16.931728, 16.975609, 17.09624, undefined, undefined, undefined..., 5]Se garantiza que ambas matrices siempre tendrán la misma longitud.
Quiero eliminar todos los valores indefinidos de mi matriz nums y luego eliminar elementos en el índice coincidente en mi matriz de pasos.
¿Hay una manera clara de hacer esto?
Puedo lograr esto haciendo nums.filter y luego realizar un seguimiento de los índices eliminados en una matriz.
y luego recorra la matriz de índices eliminados hacia atrás para eliminar los elementos en la matriz de pasos, pero esto se siente muy desordenado. ¿Hay una manera simple de abordar esto?
El resultado final debe ser
steps = [0, 2, 4, 50] nums = [16.931728, 16.975609, 17.09624, 5]Podría usar Array.reduce() para crear la salida requerida.
Para cada elemento en la matriz de pasos, verificaremos si la matriz nums correspondiente no está undefined , si lo está, omitimos agregar a las matrices de salida.
let steps = [0, 2, 4, 6, 8, 10, 12, 15, 20, 25, 30, 35, 40, 45, 50] let nums = [16.931728, 16.975609, 17.09624, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 5] let result = steps.reduce((acc, val, i) => { if (nums[i] !== undefined) { acc.nums.push(nums[i]); acc.steps.push(val); } return acc; }, { steps: [], nums: [] }) console.log('steps:', result.steps); console.log('nums:', result.nums); .as-console-wrapper { max-height: 100% !important; top: 0; }Puede tomar un solo bucle desde el final y eliminarlo si es necesario.
const steps = [0, 2, 4, 6, 8], nums = [16.931728, 16.975609, undefined, undefined, 17.09624] let i = nums.length; while (i--) { if (nums[i] !== undefined) continue; steps.splice(i, 1); nums.splice(i, 1); } console.log(...steps); console.log(...nums);