Estoy un poco confundido con el operador de delete
de JavaScript. Soy principiante en JS y tengo un problema con removeName(person)
. Tome el siguiente fragmento de código:
let user = {}; user.name = "name"; export default function removeName (person){ delete user.name; return new Object(person) } removeName(user); console.log(user);
Después de ejecutar este fragmento de código, tomo como salida {}
pero quiero la siguiente función
removeName (person)
, acepta el objeto de persona como parámetro y modifica el objeto de persona eliminando el campo de nombre de propiedad. LA función no devolverá nada, modificará el objeto directamente.
Estoy un poco confundido porque creo que resuelvo pero no obtengo el resultado que necesito.
Hay dos grandes diferencias entre las expectativas que ha descrito y su código:
user
, que es el mismo objeto que pasas en este caso específico, pero si pasas algo más, tu function
actual eliminaría incorrectamente el nombre del user
incluso si tuvieras la intención de eliminar el name
de otro objeto let user = {}; user.name = "name"; function removeName (person){ delete person.name; } removeName(user); console.log(user);
El user
y la person
son el mismo objeto en el montón (tienen la misma referencia/puntero). Entonces, si desea eliminar la propiedad solo para el objeto de person
en función, debe crear una copia de este objeto y eliminarla allí. Si necesita una función para no devolver nada, simplemente eliminando la propiedad de la person
, intente esto:
let user = {}; user.name = "name"; export default function removeName (person){ let copy = Object.assign({}, person); delete copy.name; } removeName(user); console.log(user);