Tengo una matriz y quiero convertir los valores vacíos/indefinidos en nulos. He probado lo siguiente:
let arr = [] arr[1] = 2 arr[7] = 10 arr = arr.map(x => x || null) console.log(arr)Pero la salida del fragmento no es la deseada:
[ indefinido, 2, indefinido, indefinido, indefinido, indefinido, indefinido, 10 ]
¿Cómo reemplazo estos valores indefinidos con valores nulos? AIT
Nota: Se aceptan tanto las respuestas de Vanilla JS como las de Lodash.
Lo que tiene funcionará para una matriz que tiene elementos undefined , pero no para una matriz dispersa con agujeros, porque el map no visita los agujeros en una matriz dispersa; en cambio, la matriz resultante solo tiene agujeros en los mismos lugares.
Si también desea mapear los agujeros, puede usar Array.from con su devolución de llamada de mapeo:
let arr = []; arr[1] = 2; arr[7] = 10; arr = Array.from(arr, x => x || null); console.log(arr); A diferencia de map , Array.from pasará por todos los índices de la matriz, incluidos los agujeros, pasando undefined como x para los agujeros en la matriz a la devolución de llamada de mapeo.
Otra opción es un ciclo for-of simple, porque la iteración visita huecos en arreglos dispersos (es por eso que Array.from funciona arriba):
let arr = []; arr[1] = 2; arr[7] = 10; const newArr = []; for (const value of arr) { newArr.push(value || null); } arr = newArr; console.log(arr); Tenga en cuenta que x || null reemplazará todos los valores falsos con null (incluidos 0 y "" , que a menudo hacen tropezar a la gente). Para simplemente reemplazar undefined , use x ?? null en su lugar:
let arr = []; arr[1] = 2; arr[7] = 10; arr = Array.from(arr, x => x ?? null); console.log(arr);o
let arr = []; arr[1] = 2; arr[7] = 10; const newArr = []; for (const value of arr) { newArr.push(value ?? null); } arr = newArr; console.log(arr); x ?? y ( unión nula ) es como x || y pero solo usa y si x se evalúa como undefined o null .
Prueba algo muy básico:
let arr = []; arr[1] = 2; arr[7] = 10; for(let i=0; i< arr.length; i++) { if(!arr[i]) arr[i]=null; } console.log(arr);Producción:
[ nulo, 2, nulo, nulo, nulo, nulo, nulo, 10 ]