首页 > 解决方案 > 将具有嵌套数组的对象转换为大对象

问题描述

我需要一些帮助来正确准备我的对象以更新我的数据库

我从 API 中得到的:

{
  currency: 'USD',
  product_id: '1',
  user_id: '123',
  service_id: '999',
  tech: 'javaScript',
  price: '50',
  details: [
    { detail_type: 'hours_service', value: '5' },
    { detail_type: 'workers', value: '2' },
    { detail_type: 'machines', value: '2' },
    { detail_type: 'instances', value: '1' },
    { detail_type: 'difficulty', value: '2' },
  ],
  date_start: '2021-06-20',
  date_stop: '2021-06-21',
}

我需要更新我的数据库:

{
  currency: 'USD',
  product_id: '1',
  user_id: '123',
  service_id: '999',
  tech: 'javaScript',
  price: '50',
  hours_service: '5',
  workers: '2',
  machines: '2',
  instances: '1',
  difficulty: '2',
  date_start: '2021-06-20',
  date_stop: '2021-06-21',
}

我的尝试:

const api_data = {
  currency: 'USD',
  product_id: '1',
  user_id: '123',
  service_id: '999',
  tech: 'javaScript',
  price: '50',
  details: [
    { detail_type: 'hours_service', value: '5' },
    { detail_type: 'workers', value: '2' },
    { detail_type: 'machines', value: '2' },
    { detail_type: 'instances', value: '1' },
    { detail_type: 'difficulty', value: '2' },
  ],
  date_start: '2021-06-20',
  date_stop: '2021-06-21',
}

for (let item of api_data.details) {
  var arr = item
  var result = {};
  for (var i = 0, len = arr.length; i < len; i++) {
    result[arr[i].key] = arr[i].value;
  }
  console.log(result);
}

我所做的尝试给了我很多空对象......

如何detail在键:值对中进行第一个对象数组转换并使其成为一个包含所有数据的大对象?

在此先感谢,亲切的问候

标签: javascriptarraysjsonjavascript-objects

解决方案


您可以使用 reduce 来实现这一点

const apiData = {
  currency: 'USD',
  product_id: '1',
  user_id: '123',
  service_id: '999',
  tech: 'javaScript',
  price: '50',
  details: [
    { detail_type: 'hours_service', value: '5' },
    { detail_type: 'workers', value: '2' },
    { detail_type: 'machines', value: '2' },
    { detail_type: 'instances', value: '1' },
    { detail_type: 'difficulty', value: '2' },
  ],
  date_start: '2021-06-20',
  date_stop: '2021-06-21',
};
const {details,...rest} = apiData;
const transformedObj = details.reduce((result,item)=>({...result,[item.detail_type]:item.value}),{});
const result = {...rest,...transformedObj};
console.log(result);


推荐阅读