Javascript减少或展平对象?
我有一个数据对象,它是动态的,来自数据库调用。如果记录包含Javascript减少或展平对象?,javascript,lodash,Javascript,Lodash,我有一个数据对象,它是动态的,来自数据库调用。如果记录包含approval详细信息,它将包含在我返回的对象中,否则它将被忽略 我的问题是,我有一个导出方法,该方法将对象转换为excel文件,但这只是使用对象的第一级,因此缺少可能的批准数据 我试图找出如何展平或缩小对象,使其将所有键/值带到父级 示例代码: // Current Data var obj = [{ "toolSuite": "Enterprise Product", "toolStatus": "Active",
approval
详细信息,它将包含在我返回的对象中,否则它将被忽略
我的问题是,我有一个导出方法,该方法将对象转换为excel文件,但这只是使用对象的第一级,因此缺少可能的批准数据
我试图找出如何展平或缩小对象,使其将所有键/值带到父级
示例代码:
// Current Data
var obj = [{
"toolSuite": "Enterprise Product",
"toolStatus": "Active",
"toolOwnerGroup": "PD",
"toolTier": "1",
"infoSec": "Yes",
"sso": "?",
"toolPortfolio": "Enterprise Product",
"NeedByDate": "29-Jun-2018",
"approvals": {
"approval": { <--- Need to move all this data to the parent level
"ApprovalID": "139",
"TaskID": "232",
"SubmissionDate": "2018-10-03T22:19:24.153",
"WhoSubmitted": "Q1234",
"Approver": "Q5678",
"IsCanceled": "0",
"ApproverFirst": "Bob",
"ApproverLast": "Builder",
"ApproverNTID": "bbuilder"
}
}
}, {
"toolSuite": "Enterprise Product",
"toolStatus": "Active",
"toolOwnerGroup": "PD",
"toolTier": "1",
"infoSec": "Yes",
"sso": "?",
"toolPortfolio": "Enterprise Product",
"NeedByDate": "29-Jun-2018",
"ApprovalID": "139"
}]
// Desired Output
var obj = [{
"toolSuite": "Enterprise Product",
"toolStatus": "Active",
"toolOwnerGroup": "PD",
"toolTier": "1",
"infoSec": "Yes",
"sso": "?",
"toolPortfolio": "Enterprise Product",
"NeedByDate": "29-Jun-2018",
"ApprovalID": "139",
"TaskID": "232",
"SubmissionDate": "2018-10-03T22:19:24.153",
"WhoSubmitted": "Q1234",
"Approver": "Q5678",
"IsCanceled": "0",
"ApproverFirst": "Bob",
"ApproverLast": "Builder",
"ApproverNTID": "bbuilder"
}, {
"toolSuite": "Enterprise Product",
"toolStatus": "Active",
"toolOwnerGroup": "PD",
"toolTier": "1",
"infoSec": "Yes",
"sso": "?",
"toolPortfolio": "Enterprise Product",
"NeedByDate": "29-Jun-2018",
}]
//当前数据
var obj=[{
“工具套件”:“企业产品”,
“工具状态”:“活动”,
“toolOwnerGroup”:“PD”,
“工具提示”:“1”,
“信息安全”:“是”,
“sso”:“?”,
“工具组合”:“企业产品”,
“需求截止日期”:“2018年6月29日”,
“批准”:{
“批准”:{不需要库,只需排列或对象。将approval
对象分配到父对象中,然后删除approvals
键:
var obj=[{“工具套件”:“企业产品”,“工具状态”:“活动”,“工具所有者组”:“PD”,“工具提示”:“1”,“信息安全”:“是”,“sso”:“,”工具组合”:“企业产品”,“需求截止日期”:“2018年6月29日”,“批准”:{“批准有效”:“139”,“任务ID”:“232”,“提交日期”:“2018-10-03T22:19:24.153”,“提交人”:“Q1234”,“批准人”:“Q5678”,“IsCanceled”:“0”,“ApproverFirst”:“Bob”,“ApproverLast”:“Builder”,“ApproverNTID”:“bbuilder”}}},{“toolSuite”:“Enterprise Product”,“toolStatus”:“Active”,“toolOwnerGroup”:“PD”,“toolTier”:“1”,“infoSec”:“Yes”,“sso”:“,“toolPortfolio”:“Enterprise Product”,“NeedByDate”:“2018年6月29日”,“ApprovalValid”:“139}];
Object.assign(obj[0],obj[0].approvals.approval);
删除obj[0]。审核;
console.log(obj[0]);
使用lodash
这有点可读性(通过和),如下所示:
var数据={“工具套件”:“企业产品”,“工具状态”:“活动”,“工具所有者组”:“PD”,“工具提示”:“1”,“信息安全”:“是”,“sso”:“?”,“工具组合”:“企业产品”,“需求截止日期”:“2018年6月29日”,“批准”:{“批准”:“批准有效”:“139”,“任务ID”:“232”,“提交日期”:“2018-10-03T22:19:24.153”,“提交人”:Q1234,“审批人”:“Q5678”,“被取消”:“0”,“审批人优先”:“Bob”,“审批人最后一个”:“Builder”,“审批人ID”:“bbuilder”}
常量结果=(数据)
.mergeWith(数据.批准.批准)
.省略(‘批准’)
.value()
console.log(结果)
对象。赋值
比对象扩散有更好的支持,而且也不会重新分配对象(不确定这是否真的是一个问题,但我还是这样做了),因为这个对象的大小未知,在某种类型的循环/迭代中是否会以相同的方式工作?@SBB“大小未知”是什么意思“?您的意思是在obj
数组中可能有多个项目具有approvals:{approvals:{…props}
需要传输的对象?数据是一个对象数组。该数组中可能有20个对象,其中只有少数对象具有批准级别。批准级别为。只需尝试找出如何将此应用于整个对象,而无需指定特定索引,如example@SBB如果是“是”,然后请参见编辑,仅在数组中的项上循环