@nen0y

Как изменить значение ключей в массиве объектов?

Есть массив объектов:

arr = [
{id: 1, name: 'John'},
{name: 'Ivan'}
];


Нужно его немного модифицировать в массив:

arr = [
{id: 1, user_name: 'John'},
{user_name: 'Ivan'}
];


Как это сделать?
  • Вопрос задан
  • 5825 просмотров
Решения вопроса 2
WblCHA
@WblCHA
(obj) => {
  obj.user_name = obj.name;
  delete obj.name;
}
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Если отвечать ровно на то, что было спрошено:

// создаём новый массив
const newArr = arr.map(({ name, ...n }) => (n.user_name = name, n));

// изменяем существующий:
arr.forEach(n => (n.user_name = n.name, delete n.name));

Но вообще, можно и в более общем виде задачу решить:

// keys - объект вида { старый_ключ_1: 'новый_ключ_1', старый_ключ_2: 'новый_ключ_2', ... }
const renameKeys = (obj, keys) =>
  Object.fromEntries(Object
    .entries(obj)
    .map(([ k, v ]) => [ keys.hasOwnProperty(k) ? keys[k] : k, v ])
  );


const newArr = arr.map(n => renameKeys(n, { name: 'user_name' }));

function renameKeys(obj, keys) {
  for (const n of Object.entries(keys)) {
    if (obj.hasOwnProperty(n[0])) {
      obj[n[1]] = obj[n[0]];
      delete obj[n[0]];
    }
  }
}


arr.forEach(n => renameKeys(n, { name: 'user_name' }));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Ну, или как-то так =)
JSON.parse(JSON.stringify(arr).replaceAll('"name"', '"user_name"'))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы