Estaba escribiendo un código y algo me desconcertó. Tengo una matriz de números llamada alarmsList . Ahora deseo iterar a través de esta lista y si un valor es superior a 60, por ejemplo, quiero crear una nueva matriz de objetos (colección) donde almacenamos el valor alto y su índice de la matriz original. Así que toma el siguiente código
const alarmsList = [1, 61, 77, 4, 5, 6, 7, 8, 85, 4, 3, 55]; const highAlarmsList = alarmsList.map((item, index) => { if(item > 60) { return ({ value: item, index }) } }); console.log(highAlarmsList)El archivo console.log genera lo siguiente
[ undefined, { "value": 61, "index": 1 }, { "value": 77, "index": 2 }, undefined, undefined, undefined, undefined, undefined, { "value": 85, "index": 8 }, undefined, undefined, undefined ]Esta salida es lo que necesito, pero ¿cómo evito que se devuelvan los valores indefinidos? Pensé en usar array.filter pero eso no parece apropiado. ¿Debo usar un método de matriz diferente? No quiero usar un bucle for y empujar a una nueva matriz a menos que esa sea la mejor / única forma de lograr la nueva matriz sin que se devuelvan los valores indefinidos.
Puede usar Array.filter() para eliminar los valores undefined usando Boolean como predicado:
const alarmsList = [1, 61, 77, 4, 5, 6, 7, 8, 85, 4, 3, 55]; const highAlarmsList = alarmsList.map((item, index) => { if(item > 60) { return ({ value: item, index }) } }).filter(Boolean); console.log(highAlarmsList) Puede usar Array.flatMap() y devolver matrices vacías en lugar de undefined , pero eso podría afectar el rendimiento de matrices enormes:
const alarmsList = [1, 61, 77, 4, 5, 6, 7, 8, 85, 4, 3, 55]; const highAlarmsList = alarmsList.flatMap((item, index) => item > 60 ? { value: item, index } : [] ); console.log(highAlarmsList)map crea una nueva matriz ejecutando la devolución de llamada en cada elemento de la matriz. Si la condición no se cumple, devolverá indefinido o nulo. Por lo tanto, no es posible omitir el elemento de la salida.
Alternativamente, puede usar reducir o filtrar
const alarmsList = [1, 61, 77, 4, 5, 6, 7, 8, 85, 4, 3, 55]; const highAlarmsList = alarmsList.reduce((acc, item, index) => { item > 60 && acc.push({ value: item, index }) return acc; }, []) console.log(highAlarmsList)