У меня есть такой объект:

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

И моя цель - добавить новую пару ключ / значение к каждому объекту. Итоговый результат будет выглядеть так:

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

До сих пор я пытался поместить свой текущий объект в массив и выполнить цикл, но у меня ничего не получилось, так как я получаю только первый уровень пар ключ / значение.

Есть предложения, пожалуйста?

-1
Roffy bc 8 Июн 2021 в 21:38

4 ответа

Лучший ответ

Самый простой способ сделать это - использовать for...in цикл.

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; }

Если вы не хотите изменять данные, вы можете попробовать следующее:

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 Июн 2021 в 18:48

Если вам нравится изменять объект, а не создавать новый, используйте for...in цикл.

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 Июн 2021 в 18:47

A for..in должен сделать это

for (const key in yourObject) {
  yourObject[key].newField = false
}
1
Liad 8 Июн 2021 в 18:45

Попробуй это :

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 Июн 2021 в 18:47