Tengo una pequeña pregunta.
¿Por qué necesitábamos pickBy en Lodash o similar? Simplemente simple con delete operator .
// Input const source = { user: { firstname: "John", lastname: "Done" }, password: "123" }; // Output const result = { user: { firstname: "John", lastname: "Done" } };Hay muchas formas de obtener el resultado deseado: https://codesandbox.io/s/cool-rubin-xlj25k?file=/src/index.ts
Con pickBy :
const result = _.pickBy( source, (value, key) => !(key === "password" && value === "123") );Con nativo:
const result = Object.fromEntries( Object.entries(source).filter( ([key, value]) => !(key === "password" && value === "123") ) ); Y con el delete operator : ligero, más rápido, sin bucles,...vv
const result = Object.assign({}, source); if (result.password === "123") { delete result.password; } Entonces, estoy buscando razones para no usar el delete operator .
--ACTUALIZADO por problema de mutación:
Todas las formas están mutadas user.firstname
source.user.firstname = "New first name"; console.log({ source, result }); { "source": { "user": { "firstname": "New first name", "lastname": "Done" }, "password": "123" }, "result": { "user": { "firstname": "New first name", "lastname": "Done" } } }Ligero, más rápido, sin loops,...vv
Claro, si está eliminando una sola clave, use delete .
pickBy , como su nombre lo indica, está destinado a la selección (filtrado) de elementos basada en funciones de predicado, que no es lo que hace delete sin un bucle.
Por ejemplo, si su objetivo (ficticio) es convertir
{ "foo": "bar", "baz": "quux", "beq": "berp", "uub": "uuzpq", }dentro
{ "beq": "berp", "uub": "uuzpq", } es decir, donde la clave y el valor comienzan con la misma letra; quién sabe por qué necesitaría eso, pero eso no viene al caso, lo pasaría peor con un bucle y una delete que con pickBy .