Tengo este tipo de objeto:

  {
   a:{name:'a'},
   b:{name:'b'},
   c:{name:'c'},
}

Y mi objetivo es agregar un nuevo par de clave / valor a cada objeto. Así que el resultado final se verá así:

 {
   a:{name:'a',newField:false},
   b:{name:'b',newField:false},
   c:{name:'c',newField:false},
}

Hasta ahora, he tratado de poner mi objeto actual en matriz y lazo a través, pero no tuve ningún éxito, ya que solo recibo el primer nivel de pares de teclas / valor.

¿Alguna sugerencia, por favor?

-1
Roffy bc 8 jun. 2021 a las 21:38

4 respuestas

La mejor respuesta

La forma más fácil de lograrlo para usar un for...in bucle.

const data = {
  a: { name: 'a' },
  b: { name: 'b' },
  c: { name: 'c' },
};

for (let key in data) {
  data[key].newField = false;
}

console.log(data);
.as-console-wrapper { top: 0; max-height: 100% !important; }

Si no desea mutilar los datos, puede probar lo siguiente:

const data = {
  a: { name: 'a' },
  b: { name: 'b' },
  c: { name: 'c' },
};

const copy = Object.fromEntries(Object.entries(data).map(([key, val]) =>
  [key, { ...val, newField : false }]));

console.log(copy);
.as-console-wrapper { top: 0; max-height: 100% !important; }
3
Mr. Polywhirl 8 jun. 2021 a las 18:48

Si está feliz mutando el objeto en lugar de crear un nuevo use un for...in bucle.

const obj = {
 a: {name:'a'},
 b: {name:'b'},
 c: {name:'c'},
};

for (let key in obj) {
  obj[key].newField = false;
}

console.log(obj);
2
Andy 8 jun. 2021 a las 18:47

A para..En debería hacerlo

for (const key in yourObject) {
  yourObject[key].newField = false
}
1
Liad 8 jun. 2021 a las 18:45

Pruebe esto :

const orig_obj = {
   a:{name:'a'},
   b:{name:'b'},
   c:{name:'c'},
};

Object.keys(orig_obj).forEach((key) =>{
  orig_obj[key].newField = false;
});

console.log(orig_obj);
// Output:
/*
{
   a:{name:'a',newField:false},
   b:{name:'b',newField:false},
   c:{name:'c',newField:false},
}
*/
1
Sega 8 jun. 2021 a las 18:47