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如果是“是”,然后请参见编辑,仅在数组中的项上循环