ES6基于键Typescript或Javascript合并两个数组(数组中包含另一个数组)

ES6基于键Typescript或Javascript合并两个数组(数组中包含另一个数组),javascript,reactjs,typescript,ecmascript-6,Javascript,Reactjs,Typescript,Ecmascript 6,我想合并两个数组,两个数组都包含另一个数组。请参阅下面的两个阵列 const arr1= [{"projectId":30278,"projectName":null,"details":[{"amount":"9097457.11","currency":"USD","paymentDate":"2016-05-16T00:00:00"}]},{"projectId":37602,"projectName":null,"details":[{"amount":"8234743.0","curr

我想合并两个数组,两个数组都包含另一个数组。请参阅下面的两个阵列

const arr1=
[{"projectId":30278,"projectName":null,"details":[{"amount":"9097457.11","currency":"USD","paymentDate":"2016-05-16T00:00:00"}]},{"projectId":37602,"projectName":null,"details":[{"amount":"8234743.0","currency":"USD","paymentDate":"2019-04-30T00:00:00"},{"amount":"8234743.0","currency":"USD","paymentDate":"2019-04-23T00:00:00"}]}]

const arr2= 
[{"projectId":30278,"projectName":null,"details":[{"amount":"8097457.11","currency":"USD","paymentDate":"2016-05-16T00:00:00"}]},{"projectId":37602,"projectName":null,"details":[{"amount":"7234743.0","currency":"USD","paymentDate":"2019-04-30T00:00:00"},{"amount":"7234743.0","currency":"USD","paymentDate":"2019-04-23T00:00:00"}]}]
当我使用ES6扩展运算符时,两个值都附加到单个数组中。但我想基于该数组中的prjection进行合并

所以在合并之后,我需要得到如下结果

const result =
 [{"projectId":30278,"projectName":null,"details":[{"amount":"9097457.11","currency":"USD","paymentDate":"2016-05-16T00:00:00"},
{"amount":"8097457.11","currency":"USD","paymentDate":"2016-05-16T00:00:00"}
]},
{"projectId":37602,"projectName":null,"details":[{"amount":"8234743.0","currency":"USD","paymentDate":"2019-04-30T00:00:00"},{"amount":"8234743.0","currency":"USD","paymentDate":"2019-04-23T00:00:00"},
{"amount":"7234743.0","currency":"USD","paymentDate":"2019-04-30T00:00:00"},{"amount":"7234743.0","currency":"USD","paymentDate":"2019-04-23T00:00:00"}
]}]

你可以很容易地通过使用

常数arr1= [{projectId:30278,projectName:null,详细信息:[{金额:9097457.11,货币:美元,支付日期:2016-05-16T00:00:00}},{projectId:37602,项目名称:null,详细信息:[金额:8234743.0,货币:美元,支付日期:2019-04-30T00:00:00},{金额:8234743.0,货币:美元,支付日期:2019-04-23T00:00}] 常数arr2= [{projectId:30278,projectName:null,详细信息:[{金额:8097457.11,货币:美元,付款日期:2016-05-16T00:00:00}},{projectId:37602,项目名称:null,详细信息:[金额:7234743.0,货币:美元,付款日期:2019-04-30T00:00:00},{金额:7234743.0,货币:美元,付款日期:2019-04-23T00:00}] var fullArray=[…arr1,…arr2]; var mergedData={}; fullArray.forEachfunctiondata{ ifmergedData[data.projectId]{ mergedData[data.projectId][details]=mergedData[data.projectId][details].concatdata.details }否则{ mergedData[data.projectId]=数据; } }
console.logObject.valuesmergedData您也可以在这种情况下尝试这种方法

let mergedArr = [];    
let projectIdsArr1 = arr1.map(item => item.projectId);    
arr2.map(outerLoopItem => { 
    if (projectIdsArr1.includes(outerLoopItem.projectId)) {
      let found = arr1.find(innerLoopItem => innerLoopItem.projectId === outerLoopItem.projectId);
      found.details = [...found.details, ...outerLoopItem.details];
      mergedArr.push(found);
    } else mergedArr.push(outerLoopItem);
});
console.log(mergedArr);

您的arr1和arr2具有语法errors@krishna什么是错误?我看不到您的阵列正在关闭。请编辑阵列。现在这两个都是有效的数组。我们可以通过纯javascript实现可能的重复吗?它不是定制的scriptLodash,而是一个开源库,所以如果您不想直接使用它,可以随意复制它们的代码。
let mergedArr = [];    
let projectIdsArr1 = arr1.map(item => item.projectId);    
arr2.map(outerLoopItem => { 
    if (projectIdsArr1.includes(outerLoopItem.projectId)) {
      let found = arr1.find(innerLoopItem => innerLoopItem.projectId === outerLoopItem.projectId);
      found.details = [...found.details, ...outerLoopItem.details];
      mergedArr.push(found);
    } else mergedArr.push(outerLoopItem);
});
console.log(mergedArr);