Задать вопрос
@jizzy

JS. Как из массива объектов сделать объект с параметрами из свойств?

Привет.

Изначально такой массив объектов:
array = [
     {
     name: "Kolya",
     number: "5"
     },
     {
     name: "Olga",
     number: "10"
     }     
]


Сделать такой объект:
obj = {
      "Kolya": "5",
      "Olga": "10"
}
  • Вопрос задан
  • 7499 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const obj = Object.fromEntries(arr.map(n => [ n.name, n.number ]));
// или
const obj = arr.reduce((acc, n) => (acc[n.name] = n.number, acc), {});
// или
const obj = Object.assign({}, ...arr.map(n => ({ [n.name]: n.number })));

Или, в более общем виде:

function toObj(data, key, val = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const getVal = val instanceof Function ? val : n => n[val];
  const obj = {};

  for (const n of data) {
    obj[getKey(n)] = getVal(n);
  }

  return obj;
}

Пользоваться этим можно так (ваш случай):

const obj = toObj(arr, 'name', 'number');
// {Kolya: '5', Olga: '10'}

А можно так:

const charCodes = toObj('abc', n => n.charCodeAt());
// {97: 'a', 98: 'b', 99: 'c'}

И даже так тоже можно:

<input name="xxx" value="69">
<input name="yyy" value="187">
<input name="zzz" value="666">

const inputValues = toObj(document.querySelectorAll('input'), 'name', 'value');
// {xxx: '69', yyy: '187', zzz: '666'}
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Старый добрый for вам поможет:
var obj = {};

for (var n = 0; n < array.length; n++) {
    obj[array[n]['name']] = array[n]['value'];
}

console.dir(obj);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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