【问题标题】:Transform object with nested array into a big object将具有嵌套数组的对象转换为大对象
【发布时间】:2021-05-18 08:18:10
【问题描述】:

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

我从 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 数组转换为键:值对并使其成为一个包含所有数据的大对象?

提前致谢, 亲切的问候

【问题讨论】:

  • 请展示您的尝试。尝试循环 details 数组或类似的东西。如果您在某个特定步骤上遇到困难,我们可以提供帮助。但这不是免费的编码服务,我们不应该为您开发解决方案。
  • @JeremyTille 你说得对,很抱歉,我好像都没试过,我会用我的尝试来更新这个问题。我从没想过这是一项免费的编码服务。我只是在寻求更高级的程序员/开发人员的帮助。

标签: javascript arrays json javascript-objects


【解决方案1】:

你可以使用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);

【讨论】: