将带有嵌套数组的对象转换为大对象

问题描述

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

我从 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',{ detail_type: 'instances',value: '1' },{ detail_type: 'difficulty',],date_start: '2021-06-20',date_stop: '2021-06-21',}

我需要更新我的数据库

{
  currency: 'USD',hours_service: '5',workers: '2',machines: '2',instances: '1',difficulty: '2',}

我的尝试:

const api_data = {
  currency: 'USD',}

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

提前致谢, 亲切的问候

解决方法

你可以使用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',{ detail_type: 'instances',value: '1' },{ detail_type: 'difficulty',],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);