1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
   |  
var input =  {0: {famille: "produitIlot", code: "ECART_DISTANCE_EAU", prod_id: 1, prod_lib: "PLEDGE", ilot_key: "2185"},
1: {famille: "produitIlot", code: "ECART_DISTANCE_RIVERAIN", prod_id: 1, prod_lib: "PLEDGE", ilot_key: "2185"},
2: {famille: "dates", code: "DATE_ABSENT", prod_id: null, prod_lib: null, ilot_key: null},
3: {famille: "dates", code: "DATE_ABSENT", prod_id: null, prod_lib: null, ilot_key: null},
4: {famille: "produitIlot", code: "DEPASSEMENT_NB_APPLICATION", prod_id: 1, prod_lib: "PLEDGE", ilot_key: "2169"},
5: {famille: "produitIlot", code: "DEPASSEMENT_NB_APPLICATION", prod_id: 1, prod_lib: "PLEDGE", ilot_key: "2172"},
6: {famille: "produitIlot", code: "DEPASSEMENT_NB_APPLICATION", prod_id: 1, prod_lib: "PLEDGE", ilot_key: "2170"},
7: {famille: "produitIlot", code: "DEPASSEMENT_NB_APPLICATION", prod_id: 1, prod_lib: "PLEDGE", ilot_key: "2131"},
8: {famille: "melange", code: "PROD_MELANGE_INTERDIT", prod_id: 2, prod_lib: "", ilot_key: null},
9: {famille: "dates", code: "DATE_ABSENT", prod_id: null, prod_lib: null, ilot_key: null}, 
10: {famille: "dates", code: "DATE_ABSENT", prod_id: null, prod_lib: null, ilot_key: null},
11: {famille: "melange", code: "PROD_MELANGE_INTERDIT", prod_id: 2, prod_lib: "", ilot_key: null},
12: {famille: "dates", code: "DATE_ABSENT", prod_id: null, prod_lib: null, ilot_key: null},
13: {famille: "dates", code: "DATE_ABSENT", prod_id: null, prod_lib: null, ilot_key: null}
};
 
var output= {};
 
for (const [key, value] of Object.entries(input)) {
  var prod_id = (value.prod_id===null?"null":value.prod_id);
 
  if ( typeof output[prod_id] === 'undefined' ) 
      output[prod_id] = {};
  var prod = output[prod_id];
 
  if ( typeof prod[value.code]  === 'undefined' ) // si on a pas déjà un tableau intermédiaire de stockage des clefs pour ce code...
       prod[value.code] = []; // on initialise ce tableau 
 
  if ( value.ilot_key !== null && !prod[value.code].includes(value.ilot_key) ) // si la clef de lot n'est pas null, et qu'elle n'est pas déjà dans le tableau
       prod[value.code].push(value.ilot_key); // on la stocke dans le tableau
 
}
 
// on transforme le résultat pour avoir une concaténation
for (const [key, value] of Object.entries(output)) { // on parcourt les entrées du résultat 
  for (const [code, prod_code_value] of Object.entries(value))   { // on parcourt les codes pour chaque entrée, soit des tableaux
     if ( prod_code_value.length===0 ) { // si le tableau est vide
        value[code] = null; // ou chaîne vide si on veut
     }
     else {
        value[code] = prod_code_value.join(', ');
     }
  }
}
 
console.log(output); | 
Partager