Javascript 循环遍历对象并创建数组,然后根据id进行组合
我在尝试构建数组时遇到问题,然后根据id组合并输出多个对象 这就是问题所在(我希望这是有意义的): 我在多个对象之间循环,然后根据对象类型的值创建一个数组。然后,我将该数组构建到对象中。完成后,我需要遍历所有对象并合并具有相同id的任何对象 这是它最初的外观示例:Javascript 循环遍历对象并创建数组,然后根据id进行组合,javascript,arrays,json,Javascript,Arrays,Json,我在尝试构建数组时遇到问题,然后根据id组合并输出多个对象 这就是问题所在(我希望这是有意义的): 我在多个对象之间循环,然后根据对象类型的值创建一个数组。然后,我将该数组构建到对象中。完成后,我需要遍历所有对象并合并具有相同id的任何对象 这是它最初的外观示例: [{ "id": "755", "entities": ["14394551"], "accountID":
[{
"id": "755",
"entities": ["14394551"],
"accountID": "755",
"accountName": "122060 Test7",
"amount": 43,
"subsidiary": "2",
"currency": "1",
"webPaymentMethod": "Test7",
"webPaymentMethodID": "14",
"type": "CustDep",
"salesOrderId": ["14394550"],
"memo": ["MAINGB588328"],
"exchangerate": 1
}, {
"id": "755",
"entities": ["14394553"],
"accountID": "755",
"accountName": "122060 Test7",
"amount": 28,
"subsidiary": "2",
"currency": "1",
"webPaymentMethod": "Test7",
"webPaymentMethodID": "14",
"type": "CustDep",
"salesOrderId": ["14394552"],
"memo": ["MAINGB588333"],
"exchangerate": 1
},{
"id": "758",
"entities": ["14439896"],
"accountID": "758",
"accountName": "122070 Test5",
"amount": 38,
"subsidiary": "2",
"currency": "1",
"webPaymentMethod": "Test5",
"webPaymentMethodID": "12",
"type": "CustDep",
"salesOrderId": ["14439895"],
"memo": ["MICGB2454"],
"exchangerate": 1
}, {
"id": "758",
"entities": ["14434400"],
"accountID": "758",
"accountName": "122070 Test5",
"amount": 18,
"subsidiary": "2",
"currency": "1",
"webPaymentMethod": "Test5",
"webPaymentMethodID": "12",
"type": "CustDep",
"salesOrderId": ["14434399"],
"memo": ["MICGB2453"],
"exchangerate": 1
}, {
"id": "758",
"entities": ["14430895"],
"accountID": "758",
"accountName": "122070 Test5",
"amount": 63,
"subsidiary": "2",
"currency": "1",
"webPaymentMethod": "Test5",
"webPaymentMethodID": "12",
"type": "Dep",
"salesOrderId": ["14430894"],
"memo": ["MICGB2452"],
"exchangerate": 1
}, {
"id": "762",
"entities": ["14350538"],
"accountID": "762",
"accountName": "122100 TEST1",
"amount": 45,
"subsidiary": "2",
"currency": "1",
"webPaymentMethod": "TEST1",
"webPaymentMethodID": "13",
"type": "CustDep",
"salesOrderId": ["14350537"],
"memo": ["MAINGB586991"],
"exchangerate": 1
}, {
"id": "760",
"entities": ["14350538"],
"accountID": "760",
"accountName": "122100 TEST2",
"amount": 49,
"subsidiary": "2",
"currency": "1",
"webPaymentMethod": "TEST2",
"webPaymentMethodID": "13",
"type": "CustDep",
"salesOrderId": ["14321538"],
"memo": ["MAINGB452756"],
"exchangerate": 1
}]
然后,这是在创建数组之后->根据类型而定
[
{
"id": "755",
"accountID": "755",
"accountName": "122060 Test7",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [{
"entities": ["14394551"],
"amount": 43,
"webPaymentMethod": "Test7",
"webPaymentMethodID": "14",
"salesOrderId": ["14394550"],
"memo": ["MAINGB588328"]
}],
"deposit": []
}, {
"id": "755",
"accountID": "755",
"accountName": "122060 Test7",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [{
"entities": ["14394553"],
"amount": 28,
"webPaymentMethod": "Test7",
"webPaymentMethodID": "14",
"salesOrderId": ["14394552"],
"memo": ["MAINGB588333"],
}],
"deposit": []
},{
"id": "758",
"entities": ["14439896"],
"accountID": "758",
"accountName": "122070 Test5",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [{
"entities": ["14439896"],
"amount": 38,
"webPaymentMethod": "Test5",
"webPaymentMethodID": "12",
"salesOrderId": ["14439895"],
"memo": ["MICGB2454"]
}],
"deposit": []
}, {
"id": "758",
"accountID": "758",
"accountName": "122070 Test5",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit" : [{
"entities": ["14434400"],
"amount": 18,
"webPaymentMethod": "Test5",
"webPaymentMethodID": "12",
"salesOrderId": ["14434399"],
"memo": ["MICGB2453"]
}],
"deposit": []
}, {
"id": "758",
"accountID": "758",
"accountName": "122070 Test5",
"subsidiary": "2",
"currency": "1",
"type": "Dep",
"exchangerate": 1,
"customerDeposit": [],
"deposit": [{
"entities": ["14430895"],
"amount": 63,
"memo": ["MICGB2452"],
}]
}, {
"id": "762",
"accountID": "762",
"accountName": "122100 TEST1",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [
{
"entities": ["14350538"],
"amount": 45,
"webPaymentMethod": "TEST1",
"webPaymentMethodID": "13",
"salesOrderId": ["14350537"],
"memo": ["MAINGB586991"],
}
],
"deposit": []
}, {
"id": "760",
"accountID": "760",
"accountName": "122100 TEST2",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [{
"entities": ["14350538"],
"amount": 49,
"webPaymentMethod": "TEST2",
"webPaymentMethodID": "13",
"salesOrderId": ["14321538"],
"memo": ["MAINGB452756"]
}],
"deposit": []
}]
那么这就是我想要的最终输出——所有相同的id对象都有customerDeposit/deposit组合
[
{
"id": "755",
"accountID": "755",
"accountName": "122060 Test7",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [{
"entities": ["14394551"],
"amount": 43,
"webPaymentMethod": "Test7",
"webPaymentMethodID": "14",
"salesOrderId": ["14394550"],
"memo": ["MAINGB588328"]
}, {
"entities": ["14394553"],
"amount": 28,
"webPaymentMethod": "Test7",
"webPaymentMethodID": "14",
"salesOrderId": ["14394552"],
"memo": ["MAINGB588333"],
}],
"deposit": []
}, {
"id": "758",
"entities": ["14439896"],
"accountID": "758",
"accountName": "122070 Test5",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [{
"entities": ["14439896"],
"amount": 38,
"webPaymentMethod": "Test5",
"webPaymentMethodID": "12",
"salesOrderId": ["14439895"],
"memo": ["MICGB2454"]
}, {
"entities": ["14434400"],
"amount": 18,
"webPaymentMethod": "Test5",
"webPaymentMethodID": "12",
"salesOrderId": ["14434399"],
"memo": ["MICGB2453"]
}],
"deposit": [{
"entities": ["14430895"],
"amount": 63,
"memo": ["MICGB2452"],
}]
}, {
"id": "762",
"accountID": "762",
"accountName": "122100 TEST1",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [
{
"entities": ["14350538"],
"amount": 45,
"webPaymentMethod": "TEST1",
"webPaymentMethodID": "13",
"salesOrderId": ["14350537"],
"memo": ["MAINGB586991"],
}
],
"deposit": []
}, {
"id": "760",
"accountID": "760",
"accountName": "122100 TEST2",
"subsidiary": "2",
"currency": "1",
"type": "CustDep",
"exchangerate": 1,
"customerDeposit": [{
"entities": ["14350538"],
"amount": 49,
"webPaymentMethod": "TEST2",
"webPaymentMethodID": "13",
"salesOrderId": ["14321538"],
"memo": ["MAINGB452756"]
}],
"deposit": []
}]
这是我的当前代码,但它没有按照我的要求工作,因为它跳过了任何没有多个customerDeposit/deposit的ID,因为它没有进入if(objForId)
语句
函数createDeposit(值){
存款={
实体:值。实体,
金额:value.amount,
备注:values.memo,
};
退还保证金;
}
函数createCustomerDeposit(值){
客户存款={
实体:值。实体,
金额:value.amount,
备注:values.memo,
webPaymentMethod:values.webPaymentMethod,
webPaymentMethodID:values.webPaymentMethodID,
salesOrderId:values.salesOrderId,
};
返回客户存储;
}
函数运行(){
常量传输数据=[{
“id”:“755”,
“实体”:[“14394551”],
“accountID”:“755”,
“accountName”:“122060测试7”,
“金额”:43,
“子公司”:“2”,
“货币”:“1”,
“webPaymentMethod”:“Test7”,
“webPaymentMethodID”:“14”,
“类型”:“CustDep”,
“salesOrderId”:[“14394550”],
“备忘录”:[“主要GB588328”],
“汇率”:1
}, {
“id”:“755”,
“实体”:[“14394553”],
“accountID”:“755”,
“accountName”:“122060测试7”,
“金额”:28,
“子公司”:“2”,
“货币”:“1”,
“webPaymentMethod”:“Test7”,
“webPaymentMethodID”:“14”,
“类型”:“CustDep”,
“salesOrderId”:[“14394552”],
“备忘录”:[“主要GB588333”],
“汇率”:1
},{
“id”:“758”,
“实体”:[“14439896”],
“accountID”:“758”,
“accountName”:“122070测试5”,
“金额”:38,
“子公司”:“2”,
“货币”:“1”,
“webPaymentMethod”:“Test5”,
“webPaymentMethodID”:“12”,
“类型”:“CustDep”,
“salesOrderId”:[“14439895”],
“备忘录”:[“MICGB2454”],
“汇率”:1
}, {
“id”:“758”,
“实体”:[“14434400”],
“accountID”:“758”,
“accountName”:“122070测试5”,
“金额”:18,
“子公司”:“2”,
“货币”:“1”,
“webPaymentMethod”:“Test5”,
“webPaymentMethodID”:“12”,
“类型”:“CustDep”,
“salesOrderId”:[“14434399”],
“备忘录”:[“MICGB2453”],
“汇率”:1
}, {
“id”:“758”,
“实体”:[“14430895”],
“accountID”:“758”,
“accountName”:“122070测试5”,
“金额”:63,
“子公司”:“2”,
“货币”:“1”,
“webPaymentMethod”:“Test5”,
“webPaymentMethodID”:“12”,
“类型”:“Dep”,
“salesOrderId”:[“14430894”],
“备忘录”:[“MICGB2452”],
“汇率”:1
}, {
“id”:“762”,
“实体”:[“14350538”],
“accountID”:“762”,
“accountName”:“122100测试1”,
“金额”:45,
“子公司”:“2”,
“货币”:“1”,
“webPaymentMethod”:“TEST1”,
“webPaymentMethodID”:“13”,
“类型”:“CustDep”,
“salesOrderId”:[“14350537”],
“备忘录”:[“主要GB586991”],
“汇率”:1
}, {
“id”:“760”,
“实体”:[“14350538”],
“accountID”:“760”,
“accountName”:“122100测试2”,
“金额”:49,
“子公司”:“2”,
“货币”:“1”,
“webPaymentMethod”:“TEST2”,
“webPaymentMethodID”:“13”,
“类型”:“CustDep”,
“salesOrderId”:[“1432538”],
“备忘录”:[“主要GB452756”],
“汇率”:1
}];
var customerDeposit=[];
var存款=[];
var res=transferData.reduce(函数(agg,obj){
var objForId=agg.filter(函数(idObj){
返回idObj.id==obj.id;
})[0];
if(objForId){
如果(obj.type=='CustDep'){
objForId.customerDeposit.push(createCustomerDeposit(obj));
}
如果(对象类型=='Dep'){
objForId.deposit.push(createDeposit(obj));
}
}否则{
总推力({
id:obj.id,
accountID:obj.accountID,
accountName:obj.accountName,
附属公司:obj.subsidiary,
货币:obj.currency,
兑换率,
客户存款,
押金
});
customerDeposit=[];
存款=[];
}
返回agg;
}, []);
控制台日志(res);
}
run()代码>请去阅读。你必须展示的与你的问题相关的代码,直接属于你的问题,而不只是在某个外部平台上转储。“我正在循环多个JSON对象…”-不,你没有,因为。这些是对象(因此json
标记与此问题无关)