0
votes

Impossible de regrouper la matrice selon la valeur de la clé à l'aide de jQuery / JavaScript

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);


9 commentaires

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 Il devrait y avoir 2 ensemble de pronau_accounts_assigné mais maintenant sur le à venir.


Vous ne pouvez pas grouper par ID (identifiant de connexion), voulez-vous dire par trier?


3 Réponses :


0
votes

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 SADscore JS ou lo-dash JS strong>. Voir ci-dessous l'exemple qui pourrait résoudre votre problème avec un code lisible. XXX PRE>

P>

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>


0 commentaires

0
votes

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));


0 commentaires

1
votes

Je vois dans vos données que vous avez en effet le même 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.

Vous avez ce 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>

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> xxx pré>

avec ce changement, le résultat aurait toujours un élément groupé pour ce double 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>

Note latérale: Vous avez un nom de champ incorrect dans les groupes code> Structure: Customer_Bank_Name Code> doit être Bank_Name_Of_Customer code>. p>

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);


1 commentaires

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?