如何使用JavaScript根据键和值映射对象?
我想通过对象键对对象数组进行分组,然后根据分组创建一个新的对象数组。我在下面展示我的物品如何使用JavaScript根据键和值映射对象?,javascript,arrays,Javascript,Arrays,我想通过对象键对对象数组进行分组,然后根据分组创建一个新的对象数组。我在下面展示我的物品 var oldArr=[ { "_id":"5c407834953d7f420d56f866", "allocated_to":"FIELD", "zone":"NORTH", "state":"DELHI", "location":"NEW DELHI", "cu
var oldArr=[
{
"_id":"5c407834953d7f420d56f866",
"allocated_to":"FIELD",
"zone":"NORTH",
"state":"DELHI",
"location":"NEW DELHI",
"customer_name":"REET INFOTECH",
"bank_name_of_customer":"YES BANK",
"cl_contract_id":"LAI-00016881",
"lk_loan_account_id":"LK0000015094",
"front_end_manager_name":"SONAL",
"area_collection_manager":"ASHIS JENA",
"installment_date":"",
"collection_manager":"",
},
{
"_id":"5c407834953d7f420d56f867",
"allocated_to":"FIELD",
"zone":"NORTH",
"state":"DELHI",
"location":"Sree Nagar",
"customer_name":"REET",
"bank_name_of_customer":"Corporate BANK",
"cl_contract_id":"LAI-00016881",
"lk_loan_account_id":"LK0000015094",
"front_end_manager_name":"SONAL",
"area_collection_manager":"ASHIS JENA",
"installment_date":"",
"collection_manager":"",
},
{
"_id":"5c407834953d7f420d56f868",
"allocated_to":"FIELD",
"zone":"EAST",
"state":"Odisha",
"location":"Bhubaneswar",
"customer_name":"REET",
"bank_name_of_customer":"PNB BANK",
"cl_contract_id":"LAI-00016881",
"lk_loan_account_id":"LK0000015094",
"front_end_manager_name":"SONAL",
"area_collection_manager":"ASHIS JENA",
"installment_date":"",
"collection_manager":"",
},
{
"_id":"5c407834953d7f420d56f890",
"allocated_to":"FIELD",
"zone":"EAST",
"state":"Assam",
"location":"Gawhati",
"customer_name":"REET",
"bank_name_of_customer":"SBI BANK",
"cl_contract_id":"LAI-00016881",
"lk_loan_account_id":"LK0000015094",
"front_end_manager_name":"SONAL",
"area_collection_manager":"ASHIS JENA",
"installment_date":"",
"collection_manager":"",
}
]
我需要制作一个新的数组,它应该按照区域、状态、位置进行分组,格式如下所示
newdata={
zone_list: [{
zone: NORTH,
state_list: [{
state: DELHI,
location_list: [{
location: NEW DELHI,
task_list: [{
user_pkId: 5c407834953d7f420d56f866,
front_end_manager_name: SONAL,
collection_manager: "",
area_collection_manager: ASHIS JENA,
loan_accounts_assigned: [{
allocated_to: FIELD,
lk_loan_account_id: LK0000015094,
cl_contract_id: LAI-00016881,
customer_name: REET INFOTECH,
customer_bank_name: YES BANK,
}]
}]
}]
},{
state: JK,
location_list: [{
location: Sree Nagar,
task_list: [{
user_pkId: 5c407834953d7f420d56f867,
front_end_manager_name: SONAL,
collection_manager: "",
area_collection_manager: ASHIS JENA,
loan_accounts_assigned: [{
allocated_to: FIELD,
lk_loan_account_id: LK0000015094,
cl_contract_id: LAI-00016881,
customer_name: REET INFOTECH,
customer_bank_name: Corporate BANK,
}]
}]
}]
}]
},{
zone: EAST,
state_list: [{
state: Odisha,
location_list: [{
location: Bhubaneswar,
task_list: [{
user_pkId: 5c407834953d7f420d56f868,
front_end_manager_name: SONAL,
collection_manager: "",
area_collection_manager: ASHIS JENA,
loan_accounts_assigned: [{
allocated_to: FIELD,
lk_loan_account_id: LK0000015094,
cl_contract_id: LAI-00016881,
customer_name: REET INFOTECH,
customer_bank_name: SBI BANK,
}]
}]
}]
}]
}]
}
我在下面提供我的代码
var zonelist=[];
var statelist=[];
var locationlist=[];
var tasklist=[];
var loanarr=[];
var finalArr=[];
for(var i=0;i<dataArr.length;i++){
if (zonelist.length > 0) {
var hasZone=false;
var zoneindex='';
for(var j=0;j<zonelist.length;j++){
if (dataArr[i]['zone']==zonelist[j]['zone']) {
hasZone=true;
zoneindex=j;
break;
}
}
if (hasZone==true) {
var hasState=false;
var stateindex='';
for(var k=0;k<zonelist[zoneindex]['state_list'].length;k++){
if (dataArr[i]['state']==zonelist[zoneindex]['state_list'][k]['state']) {
hasState=true;
stateindex=k;
}
}
if (hasState==true) {
var haslocation=false;
var locindex='';
for(var l=0;l<zonelist[zoneindex]['state_list'][stateindex]['location_list'].length;l++){
if (dataArr[i]['location']==zonelist[zoneindex]['state_list'][stateindex]['location_list'][l]['location']) {
haslocation=true;
locindex=l;
}
}
if (haslocation==true) {
var hasUser=false;
var userindex='';
}else{
var dataloan={'allocated_to':dataArr[i]['allocated_to'],'lk_loan_account_id':dataArr[i]['lk_loan_account_id'],'cl_contract_id':dataArr[i]['cl_contract_id'],'customer_name':dataArr[i]['customer_name'],'customer_bank_name':dataArr[i]['bank_name_of_customer']};
loanarr.push(datatask);
var datatask={'user_pkId':dataArr[i]['_id'],'front_end_manager_name':dataArr[i]['front_end_manager_name'],'collection_manager':dataArr[i]['collection_manager'],'area_collection_manager':dataArr[i]['area_collection_manager'],'loan_accounts_assigned':loanarr};
tasklist.push(datatask);
var dataloc={'location':dataArr[i]['location'],'task_list':tasklist};
locationlist.push(dataloc);
}
}else{
var dataloan={'allocated_to':dataArr[i]['allocated_to'],'lk_loan_account_id':dataArr[i]['lk_loan_account_id'],'cl_contract_id':dataArr[i]['cl_contract_id'],'customer_name':dataArr[i]['customer_name'],'customer_bank_name':dataArr[i]['bank_name_of_customer']};
loanarr.push(datatask);
var datatask={'user_pkId':dataArr[i]['_id'],'front_end_manager_name':dataArr[i]['front_end_manager_name'],'collection_manager':dataArr[i]['collection_manager'],'area_collection_manager':dataArr[i]['area_collection_manager'],'loan_accounts_assigned':loanarr};
tasklist.push(datatask);
var dataloc={'location':dataArr[i]['location'],'task_list':tasklist};
locationlist.push(dataloc);
var datastate={'state':dataArr[i]['state'],'location_list':locationlist};
statelist.push(datastate);
}
}else{
var dataloan={'allocated_to':dataArr[i]['allocated_to'],'lk_loan_account_id':dataArr[i]['lk_loan_account_id'],'cl_contract_id':dataArr[i]['cl_contract_id'],'customer_name':dataArr[i]['customer_name'],'customer_bank_name':dataArr[i]['bank_name_of_customer']};
loanarr.push(datatask);
var datatask={'user_pkId':dataArr[i]['_id'],'front_end_manager_name':dataArr[i]['front_end_manager_name'],'collection_manager':dataArr[i]['collection_manager'],'area_collection_manager':dataArr[i]['area_collection_manager'],'loan_accounts_assigned':loanarr};
tasklist.push(datatask);
var dataloc={'location':dataArr[i]['location'],'task_list':tasklist};
locationlist.push(dataloc);
var datastate={'state':dataArr[i]['state'],'location_list':locationlist};
statelist.push(datastate);
var datazone={'zone':dataArr[i]['zone'],'state_list':statelist};
zonelist.push(datazone);
}
}else{
var dataloan={'allocated_to':dataArr[i]['allocated_to'],'lk_loan_account_id':dataArr[i]['lk_loan_account_id'],'cl_contract_id':dataArr[i]['cl_contract_id'],'customer_name':dataArr[i]['customer_name'],'customer_bank_name':dataArr[i]['bank_name_of_customer']};
loanarr.push(dataloan);
var datatask={'user_pkId':dataArr[i]['_id'],'front_end_manager_name':dataArr[i]['front_end_manager_name'],'collection_manager':dataArr[i]['collection_manager'],'area_collection_manager':dataArr[i]['area_collection_manager'],'loan_accounts_assigned':loanarr};
tasklist.push(datatask);
var dataloc={'location':dataArr[i]['location'],'task_list':tasklist};
locationlist.push(dataloc);
var datastate={'state':dataArr[i]['state'],'location_list':locationlist};
statelist.push(datastate);
var datazone={'zone':dataArr[i]['zone'],'state_list':statelist};
zonelist.push(datazone);
}
}
var findata={'zone_list':zonelist};
console.log('finaldata',findata);
var zonelist=[];
var statelist=[];
var locationlist=[];
var tasklist=[];
var Loanar=[];
var finalArr=[];
对于(变量i=0;i 0){
var hasZone=假;
var zoneindex=“”;
对于(var j=0;j,下面的代码并不能给出完全正确的结果,但您应该对如何实现这一点有更好的认识。
.reduce()的引用是:
var oldArr=[
{
“id”:“5c407834953d7f420d56f866”,
“分配给”:“字段”,
“区域”:“北部”,
“国家”:“德里”,
“地点”:“新德里”,
“客户名称”:“REET INFOTECH”
},
{
“id”:“5c407834953d7f420d56f867”,
“分配给”:“字段”,
“区域”:“北部”,
“州”:“JK”,
“地点”:“Sree Nagar”,
“客户名称”:“REET”
},
{
“id”:“5c407834953d7f420d56f868”,
“分配给”:“字段”,
“区域”:“东部”,
“国家”:“奥迪沙”,
“地点”:“布巴内斯瓦尔”,
“客户名称”:“REET”
}
]
让结果=oldArr.reduce(
功能(acc、curr){
var sameZone=acc.find(函数(accData){return accData.zone===curr.zone})
如果(sameZone){
sameZone.state_list.push({
州:当前州,
任务列表:[{
用户密钥:curr.id,
贷款账户分配:[{
客户名称:当前客户名称
}]
}]
})
}否则{
加速推({
区域:当前区域,
州清单:[{
州:当前州,
任务列表:[{
用户密钥:curr.id,
贷款账户分配:[{
客户名称:当前客户名称
}]
}]
}]
})
}
返回acc;
}, []);
log(result);
您可以为想要的组和相关键获取一个数组,并采用迭代和递归的方法
var数据=[{u id:“5C4078353D7F420D56F866”,分配给:“现场”,区域:“北部”,州:“德里”,地点:“新德里”,客户名称:“REET INFOTECH”,银行名称客户:“是的银行”,合同id:“LAI-0001681”,贷款账户id:“LK0000015094”,前端经理名称:“SONAL”,区域收款经理:“ASHIS JENA”,分期付款日期:“,”收款人:“},{id:“5c407834953d7f420d56f867”,分配给:“现场”,区域:“北部”,州:“德里”,地点:“Sree Nagar”,客户名称:“REET”,客户的银行名称:“公司银行”,合同id:“LAI-0001681”,贷款账户id:“LK0000015094”,前端经理名称:“SONAL”地区收款经理:“ASHIS JENA”,分期付款日期:“,”收款经理:“,”{id:“5c407834953d7f420d56f868”,分配给:“现场”,区域:“东部”,州:“Odisha”,地点:“Bhubaneswar”,客户名称:“REET”,客户的银行名称:“PNB银行”,cl合同id:“LAI-00016881”,lk贷款账户id:“LK0000015094”,前端经理姓名:“SONAL”,区域收款经理:“ASHIS JENA”,分期付款日期:“,收款经理:”,{id:“5C4078349D3D7F420D56F890”,分配给:“FIELD”,zone:“EAST”,state:“Assam”,地点:“Gawhati”,客户名称:“REET”,客户银行名称:“SBI银行”,cl合同id:“LAI-0001681”,lk贷款账户id:“LK0000015094”,前端经理姓名:“SONAL”,区域收藏经理:“ASHIS JENA”,分期付款日期:,收藏经理:”},
组=[
[“区域列表”,“区域”],
['state_list','state'],
[“位置列表”,“位置”],
['task_list'、'u id'、'front_end_manager_name'、'area_collection_manager'、'collection_manager'],
['loan_accounts_assigned'、'lk_loan_account_id'、'assigned_to'、'cl_contract_id'、'customer_name'、'bank_name_of_customer']
],
结果=数据。减少((r,o)=>{
减少((t,[组,…键])=>{
var temp=(t[group]=t[group]| |[])。find(p=>o[keys[0]]==p[keys[0]]);
如果(!temp){
temp=Object.assign({},…keys.map(k=>({[k]:o[k]}));
t[组]。推送(温度);
}
返回温度;
},r);
返回r;
}, {});
console.log(结果);
。作为控制台包装器{max height:100%!important;top:0;}
你能告诉我们你已经尝试了什么吗?:-)你应该知道看到你的名声,你不会要求代码,而是发布你自己的代码,人们会帮助你调试。当你点击创建此帖子时,按钮上写着“提问”。但是“我想要”或“我需要”"这不是一个问题。我们将帮助您修复bug,而不仅仅是完全为您完成工作。您做了哪些研究?您尝试了哪些代码?您面临哪些问题?请阅读更多关于如何提出有用问题的指导。旁白:人们问了很多此类问题……我相信您可以通过搜索旧问题获得一些想法选项,以及读取PHP文档等。想要的结果与给定的数据不匹配。请根据数据添加想要的结果,反之亦然。请添加代码,您已经尝试过了。@NinaScholz:我已经给出了我的尝试过的代码。@NinaScholz:是。loan\u accounts\u assigned
应该是一个数组对象。您明白了。是的,我确实喜欢groups=['zone\u list'、'zone']、['state\u list'、['location\u list'、'location']、['task\u list'、'task\u list']]、finalGroup='loan\u accounts\u assigned'、
但所有数据都附加到loan\u accounts\u assigned
中,其中一些数据将保留在此处