javascript - 将具有嵌套数组的对象转换为大对象
问题描述
我需要一些帮助来正确准备我的对象以更新我的数据库
我从 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
在键:值对中进行第一个对象数组转换并使其成为一个包含所有数据的大对象?
在此先感谢,亲切的问候
解决方案
您可以使用 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);
推荐阅读
- ffmpeg - 我可以使用 ffmpeg 减少缓冲和延迟吗?
- intel - 在 CPU 上使用 OpenVINO 模型与 Intel Compute Stick 2 的性能差异很大
- autodesk-forge - 从IFC文件导入到forge时如何获取网格(建筑基线)信息?
- spring-boot - Spring boot 找不到约束的验证器
- c# - 检查进程是否已关闭
- angularjs - 防止在 Safari 浏览器中单击鼠标右键
- nginx - nginx.conf 用于在 dir 结构中或不在 dir 结构中的根
- c# - LINQ to SQL 不创建事务
- microsoft-graph-api - 将成员添加到 Microsoft 365 组时权限不足,无法完成操作
- flutter - 如何解决颤动中的“未设置用于签名配置发布的密钥库文件”错误