Je dois regrouper mes valeurs de matrice conformément à la valeur clé à l'aide de JQuery / JavaScript, mais selon mon code, je ne pouvais pas l'obtenir. J'explique mon code ci-dessous.
var dataArr=[{"login_id":"9937229853","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":"","coll_cat":"1stcoll","reso_status":"1stres"},{"login_id":"9937229853","allocated_to":"FIELD","zone":"NORTH","state":"DELHI","location":"NEW DELHI","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":"","coll_cat":"2ndcoll","reso_status":"2ndres"},{"login_id":"9937229867","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":"","coll_cat":"3rdcoll","reso_status":"3rdres"},{"login_id":"9937229867","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":"","coll_cat":"4thcoll","reso_status":"4thres"}],
groups=[['zone_list','zone'],['state_list','state'],['location_list','location'],['task_list','login_id','front_end_manager_name','area_collection_manager','collection_manager'],['loan_accounts_assigned','lk_loan_account_id','allocated_to','cl_contract_id','customer_name','customer_bank_name'],['feedback_detail','coll_cat','reso_status']],
finalGroup = 'task_list',
result = dataArr.reduce((r, o) => {
groups.reduce((t, [group, ...keys]) => {
var temp = (t[group] = t[group] || []).find(p => o[keys[0]] === p[keys[0]]);
if (!temp) {
temp = Object.assign({}, ...keys.map(k => ({ [k]: o[k] })));
t[group].push(temp);
}
return temp;
}, r);
return r;
}, {});
console.log(result);
3 Réponses :
Si vous devez regrouper en fonction de la clé spécifique de la matrice de JSON avec un moyen simple, je suggère d'utiliser la bibliothèque utilitaire JavaScript P> <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Voici une simple fonction de groupeby pour cela:
p>
var dataArr=[
{
"login_id":"9937229853",
"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":"",
"coll_cat": "1stcoll",
"reso_status": "1stres"
},
{
"login_id":"9937229853",
"allocated_to":"FIELD",
"zone":"NORTH",
"state":"DELHI",
"location":"NEW DELHI",
"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":"",
"coll_cat": "2ndcoll",
"reso_status": "2ndres"
},
{
"login_id":"9937229867",
"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":"",
"coll_cat": "3rdcoll",
"reso_status": "3rdres"
},
{
"login_id":"9937229867",
"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":"",
"coll_cat": "4thcoll",
"reso_status": "4thres"
}
];
function groupBy(fields,data){
var groups={};
data.forEach(function(dataItem){
var key=fields.reduce(function(result,fieldName){
return (result && result+'&' || '')+fieldName+':'+(dataItem[fieldName])||'NULL';
},'');
if(!(key in groups))
groups[key]=[];
groups[key].push(dataItem);
});
return groups;
}
console.log(groupBy(['zone','state'],dataArr)); Je vois dans vos données que vous avez en effet le même Vous avez ce champ d'un point de vue de l'entreprise, il semble assez logique qu'un ID de compte de prêt identifierait de manière unique le nom du client, alors peut-être que vous devrait également vérifier la validité de vos données d'entrée. p> Si toutefois, les données d'entrée sont comme prévu, et il devrait différencier tous les champs répertoriés dans la structure code> de groupes code>, puis remplacez la ligne de code suivante: p> xxx pré> avec: p> avec ce changement, le résultat aurait toujours un élément groupé pour ce double Note latérale: Vous avez un nom de champ incorrect dans les groupes p> login_id code> se produisant deux fois dans l'entrée, et que la différence entre ces enregistrements est (entre autres) dans le nom client code> Champ. Customer_Name Code> répertorié dans la structure code> de groupes code>, mais le code ne l'utilise pas pour distinguer les enregistrements. Je suppose que le code n'était pas initialement destiné à cela et supposé qu'un tel domaine dépendait fonctionnellement de la première clé de la liste (c'est-à-dire qu'il supposait que le même lk_loan_account_id code> impliquerait le même code>), mais ceci est évidemment pas le cas dans vos données. P> login_id code>, Mais il aurait deux entrées imbriquées pour la propriété CODE> LOVE_Accounts_Asigned Code> Tableau au lieu d'une seule. P> code> Structure: Customer_Bank_Name Code> doit être Bank_Name_Of_Customer code>. p> var dataArr=[
{
"login_id":"9937229853",
"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":"",
"coll_cat": "1stcoll",
"reso_status": "1stres"
},
{
"login_id":"9937229853",
"allocated_to":"FIELD",
"zone":"NORTH",
"state":"DELHI",
"location":"NEW DELHI",
"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":"",
"coll_cat": "2ndcoll",
"reso_status": "2ndres"
},
{
"login_id":"9937229867",
"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":"",
"coll_cat": "3rdcoll",
"reso_status": "3rdres"
},
{
"login_id":"9937229867",
"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":"",
"coll_cat": "4thcoll",
"reso_status": "4thres"
}
]
var groups = [
['zone_list', 'zone'],
['state_list', 'state'],
['location_list', 'location'],
['task_list', 'login_id', 'front_end_manager_name', 'area_collection_manager', 'collection_manager'],
['loan_accounts_assigned', 'lk_loan_account_id', 'allocated_to', 'cl_contract_id', 'customer_name', 'bank_name_of_customer'],
['feedback_detail', 'coll_cat', 'reso_status']
],
finalGroup = 'task_list',
result = dataArr.reduce((r, o) => {
groups.reduce((t, [group, ...keys]) => {
var temp = (t[group] = t[group] || []).find(p => keys.every(key => o[key] === p[key]));
if (!temp) {
temp = Object.assign({}, ...keys.map(k => ({ [k]: o[k] })));
t[group].push(temp);
}
return temp;
}, r);
return r;
}, {});
console.log(result);
Je pense que vous avez déduit la sortie souhaitée de l'OP. Juste pour des coups de pied, ça me dérange d'inclure un exemple de travail pour voir la sortie?
Pouvez-vous inclure la sortie actuelle et attendue à la question?
Veuillez écrire une règle pour trier l'ASC / Desc pour chaque champ? et ordre de champ à trier la même chose que vous dites?
Oui sûr que je donne aussi la sortie attendue.
Ceci est le code exact de ici , mais à partir d'un compte alt?
Oui mais il ne fonctionne pas non plus comme prévu.
Je suis d'accord, en voyant un exemple de la manière dont vous voulez que la sortie structurée aidait. Je ne suis pas clair sur la façon dont vous voulez les choses groupées.
S'il vous plaît ajouter ce qui ne fonctionne pas.
@Showdev: Si vous pouvez vérifier la sortie du message de la console, une sortie attendue, mais en cas de même
login_id code> Il devrait y avoir 2 ensemble depronau_accounts_assigné code> mais maintenant sur le à venir.Vous ne pouvez pas grouper par ID (identifiant de connexion), voulez-vous dire par trier?