问题描述
我需要一些帮助来正确准备我的对象以更新我的数据库
我从 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);