#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
свойство