¿Cómo iteras sobre las propiedades de un objeto y qué métodos usarías? Explica `Object.keys`, `Object.values` y `Object.entries`.
Ver respuesta — intenta responderla en voz alta primero
Object.keys(obj) devuelve un arreglo con las claves, Object.values(obj) con los valores y Object.entries(obj) con pares [clave, valor]. Con estos arreglos puedes usar map, filter, forEach, etc. para iterar sobre objetos.
Los objetos no tienen map ni filter directamente como los arreglos. Para iterar sobre ellos, primero los conviertes en arreglos con:
Object.keys(obj): arreglo con las claves.Object.values(obj): arreglo con los valores.Object.entries(obj): arreglo de pares[clave, valor], ideal para iterar con destructuring.
Otros métodos útiles:
Object.assign(destino, origen): copia propiedades (superficial).Object.freeze(obj): congela el objeto para que no se pueda modificar.
const producto = { nombre: "Laptop", precio: 1000, stock: 5 };
// Object.keys: las claves
console.log(Object.keys(producto)); // ["nombre", "precio", "stock"]
// Object.values: los valores
console.log(Object.values(producto)); // ["Laptop", 1000, 5]
// Object.entries: pares [clave, valor]
console.log(Object.entries(producto));
// [["nombre", "Laptop"], ["precio", 1000], ["stock", 5]]
// Iterar sobre un objeto con entries y destructuring
for (const [clave, valor] of Object.entries(producto)) {
console.log(`${clave}: ${valor}`);
}
// nombre: Laptop
// precio: 1000
// stock: 5
// Object.freeze: evita modificaciones
const config = Object.freeze({ modo: "dark" });
config.modo = "light"; // ignorado (o lanza error en modo estricto)
console.log(config.modo); // "dark"
Intentar usar producto.map(...) directamente sobre un objeto: los objetos no tienen map. Primero hay que convertirlos con Object.keys/values/entries. Otro error es olvidar que Object.freeze es superficial: los objetos anidados aún pueden modificarse.
"Para iterar sobre un objeto lo convierto en un arreglo con
Object.keys,Object.valuesoObject.entries.entrieses mi favorito porque me da pares clave-valor que puedo desestructurar en unfor...of. Una vez que tengo esos arreglos puedo aplicarmap,filtero lo que necesite. También conozcoObject.assignpara combinar objetos yObject.freezepara hacerlos de solo lectura, aunque esto último es superficial."
Dado { a: 1, b: 2, c: 3 }, usa los métodos de objetos para obtener la suma de todos sus valores.
Ver solución
const obj = { a: 1, b: 2, c: 3 };
const suma = Object.values(obj).reduce((acc, n) => acc + n, 0);
console.log(suma); // 6