Как преобразовать массив с объектами, которые содержат значение,values в один объект, содержащий только ключ,values?

#javascript #arrays #ecmascript-6 #reduce

#javascript #массивы #ecmascript-6 #уменьшить

Вопрос:

Итак, после рисования данных для базы данных я получил что-то вроде

 [
{name: "id", data_type: "integer"}
{name: "name", data_type: "char"}
{name: "active", data_type: "boolean"}
]
  

но то, что я хочу, это:

 {id: "integer" , name: "char" , active: "boolean" }
  

Я перепробовал кучу вещей, но не смог разобраться, любая помощь была бы оценена

Это моя отчаянная попытка:

 Object.entries(jsonData).map((type) => {
        return { ...objectList, [type[1].name]: type[1].data_type };
      }).reduce((objectList, object) => (
          ...objectList,
          object)
        )
  

Ответ №1:

Вот простой подход:

 let arr = [
{name: "id", data_type: "integer"},
{name: "name", data_type: "char"},
{name: "active", data_type: "boolean"}
];
let map = {};
arr.forEach(e => map[e.name]=e.data_type);
console.log(map);  

Если вы хотите использовать .reduce , попробуйте это:

 let arr = [
{name: "id", data_type: "integer"},
{name: "name", data_type: "char"},
{name: "active", data_type: "boolean"}
];
let map = arr.reduce(function(obj,item){
  obj[item.name] = item.data_type; 
  return obj;
}, {});
console.log(map);  

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

1. Спасибо! the .reduce вернул ошибку для меня , но . forEach работает потрясающе!

Ответ №2:

Вот сокращение

 const data = [
{name: "id", data_type: "integer"},
{name: "name", data_type: "char"},
{name: "active", data_type: "boolean"}
];

const arrayToObject = arr => arr.reduce((result, value) => {
  result[value.name] = value.data_type;
  return resu<
}, {});

console.log(arrayToObject(data));  

Ответ №3:

другой способ заключается в использовании Array.reduce()

 const array = [
  { name: 'id', data_type: 'integer' },
  { name: 'name', data_type: 'char' },
  { name: 'active', data_type: 'boolean' },
];

const newObject = array.reduce((finalObj, obj) => {
  finalObj[obj.name] = obj.data_type;
  return finalObj;
}, {})

console.log(newObject)