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