let a = { b : null } _.get(a, 'b',''); //return nullpero
_.get (a, null, '') //return ''¿Es nulo un valor falso para _.get()?
let a = { b : {c:{ } } //basically a nested object Estoy tratando de hacer _.get(a, 'b.c','').toString() y recibo un error porque _.get return null. ¿Cuál es la mejor forma legible de escribir esto?
El tercer argumento defaultValue solo se devolverá para valores resueltos undefined , no null . ver documentos
Si desea un valor alternativo para null o undefined , use el operador de fusión nulo:
(_.get(a, "bc") ?? "").toString()A continuación se muestran diferentes resultados utilizando diferentes mecanismos para definir el valor predeterminado:
let a; a = { b: null }; _.get(a, "b", ""); // null _.get(a, "b") ?? ""; // "" _.get(a, "b") || ""; // "" a = { }; _.get(a, "b", ""); // "" a = { b: undefined }; _.get(a, "b", ""); // "" a = { b: 0 }; _.get(a, "b") || ""; // "" _.get(a, "b") ?? ""; // 0En
_.get(a, 'b',''); solicita la propiedad a['b'] , que resulta ser null , que no está undefined , por lo que obtiene null como resultado final. A continuación, en
_.get(a, null, ''); solicita la propiedad a['null'] , que no existe, por lo que no está undefined , y termina con el valor de reserva '' . Finalmente, con
let a = {b: {c: {}}}; _.get(a, 'b.c', ''); parece que estás pidiendo a a['b']['c'] , que sería un objeto vacío. Sin embargo, la notación de ruta punteada es específica de Lodash. Si usa el guión bajo, la ruta se interpreta como a['b.c'] de manera predeterminada, que no existe y no está undefined . En ese caso, debería obtener '' como resultado final. No veo forma de que esta expresión pueda dar como resultado null , incluso si está usando el valor original de a = {b: null} .
Si, de hecho, está utilizando el guión bajo y desea recuperar el objeto c anidado dentro de la propiedad b , tiene dos opciones. En primer lugar, puede usar la notación de ruta de matriz, que es portátil entre Underscore y Lodash:
_.get(a, ['b', 'c'], ''); En segundo lugar, puede anular _.toPath para habilitar la notación de ruta punteada para todas las funciones de guión bajo:
const originalToPath = _.toPath; _.toPath = function(path) { if (_.isString(path)) return path.split('.'); return originalToPath(path); } _.get(a, 'b.c', ''); No recomendaría esto, porque puede romper el código que intenta recuperar propiedades que contienen el carácter de punto . en el nombre. Lo menciono para completar; usa tu propio juicio.