Создать копию массива объектов с изменением названия поля

93
03 июля 2021, 21:00

Получаю с сервера массив объектов tempArray. Подскажите, как создать копию этого массива и переименовать поле name на title

let tempArray = [{
    id: '1',
    name: 'Tom',
    age: 11
  },
  {
    id: '2',
    name: 'Jerry',
    age: 13
  }
  ...
]
let newArr = tempArray.forEach(item => { ?
})
Answer 1

Не forEach, а map

const tempArray = [ 
  { 
    id: '1', 
    name: 'Tom', 
    age: 11 
  }, 
  { 
    id: '2', 
    name: 'Jerry', 
    age: 13 
  } 
] 
 
 
const newArr = tempArray.map(item => ({ 
  // Так ссылка не скопируется и оригинальный массив останется чист 
  id: item.id, 
  title: item.name, 
  age: item.age, 
})); 
 
console.log(newArr);

Ссылки
Array.prototype.map

Answer 2

Для начала, для создания копии массива нужно использовать не метод forEach, который просто перебирает элементы массива, а метод map который модифицирует элементы и создает новый массив из модифицированных элементов.

Копирование объекта происходит так

res = Object.assign({title: item.name}, item);

здесь в объект {title: item.name} добавляются все поля из item.

Ну а потом, в новом объекте нужно просто удалить ненужное поле

delete res.name;

let tempArray = [{ 
    id: '1', 
    name: 'Tom', 
    age: 11 
  }, 
  { 
    id: '2', 
    name: 'Jerry', 
    age: 13 
  } 
] 
 
 
let newArr = tempArray.map(item => { 
  res = Object.assign({title: item.name}, item); 
  delete res.name; 
  return res; 
}) 
 
console.log(newArr);