Назначение объекта для обновления вложенного объекта объекта

#javascript

#javascript

Вопрос:

Привет, у меня есть список объектов. Я хочу создать новый экземпляр этих объектов для обновления одного значения.

 const arr = [
  { data: { name: "first", type: "child" } },
  { data: { name: "second", type: "parent" } },
];
  

Я хотел бы иметь массив из тех же объектов, но тип которого был бы прописным, как показано ниже:

 const arr = [
  { data: { name: "first", type: "CHILD" } },
  { data: { name: "second", type: "PARENT" } },
];
  

Я сопоставляю этот массив и возвращаю новые сопоставленные объекты, я могу добавить новую опору к объекту, но я не могу найти способ изменить data.type.
Вот мой фрагмент кода:

 const a = arr.map(e => {
    return Object.assign({},e,{data['type']:'???'}
});
  

Ответ №1:

Как насчет этого способа?

 const arr=[{data:{name:'first',type:'child'}},{data:{name:'second', type:'parent'}}]
const a = arr.map(e => {
  let data = {...e["data"], type: e["data"].type.toUpperCase()};
  return ({...e, data});
});
console.log(a);  

Комментарии:

1. с небольшой модификацией это было то, что мне было нужно, спасибо;)

Ответ №2:

Вам не нужно использовать Object.assign:

 const a = arr.map(e => ({
    data: {
       name: e.name,
       type: e.type.toUpperCase()
    }
}))

  

Комментарии:

1. Я использую назначение объекта, потому что добавляю к ним некоторые новые значения

2. карта вернет новые объекты: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…

3. да, и я хочу новый массив объектов с «измененными» значениями. Конечно, исходный массив должен оставаться нетронутым

4. Это цель map . Он делает именно то, что вы хотите сделать. Попробуйте мой код

Ответ №3:

Использование map :

 const result = data.map(({ data }) => ({ data: { ...data, type: data.type.toUpperCase() }}));
  

 const data = [{data:{name:'first',type:'child'}},{data:{name:'second', type:'parent'}}]

const result = data.map(({ data }) => ({ data: { ...data, type: data.type.toUpperCase() }}));

console.log({result})  

Комментарии:

1. Пожалуйста, проверьте ввод / вывод еще раз

2. Предполагается, что объекты должны иметь data свойство