2017-10-19 1 views
1

J'écris un petit assistant qui est supposé obtenir l'élément min d'un tableau.Valeur d'objet d'accès avec les clés de propriétés calculées

La fonction prend un Array en tant que premier paramètre et le "chemin" pour accéder aux paramètres "repos" de la propriété d'objet.

Ex: minItem(stops, 'duration', 'total');

console.log: // [object object][duration][total]

attendu: // Number, Which is the value of total

const stops = 
 
[{"transport":"train","departure":"Paris","arrival":"Madrid","duration": 
 
{"h":"03","m":"15","total":195},"cost":160,"discount":0, 
 
"reference":"TPM0315","initialPrice":160}, 
 
{"transport":"bus","departure":"Paris","arrival":"Madrid", 
 
"duration":{"h":"06","m":"45","total":405},"cost":30,"discount":25, 
 
"reference":"BPM0645","initialPrice":40}, 
 
{"transport":"car","departure":"Paris","arrival":"Madrid","duration": 
 
{"h":"05","m":"45","total":345},"cost":120,"discount":0, 
 
"reference":"CPM0545","initialPrice":120}]; 
 

 

 
/** @function minItem */ 
 
const minItem = (array, ...args) => { 
 
    const keys = `['${[...args].join('\'][\'')}']`; 
 
    array.reduce((a, b) => { 
 
    console.log(b + keys); 
 
    return a + keys <= b + keys ? a : b; 
 
    }, {}); 
 
}; 
 

 
minItem(stops, 'duration', 'total');

Répondre

1

obtenir les valeurs minimales en utilisant Math#min sur un tableau de valeurs minimales, créé en utilisant Array#map. Pour obtenir la valeur au chemin args, vous pouvez parcourir les clés avec Array#reduce:

const stops = [{"transport":"train","departure":"Paris","arrival":"Madrid","duration":{"h":"03","m":"15","total":195},"cost":160,"discount":0,"reference":"TPM0315","initialPrice":160},{"transport":"bus","departure":"Paris","arrival":"Madrid","duration":{"h":"06","m":"45","total":405},"cost":30,"discount":25,"reference":"BPM0645","initialPrice":40},{"transport":"car","departure":"Paris","arrival":"Madrid","duration":{"h":"05","m":"45","total":345},"cost":120,"discount":0,"reference":"CPM0545","initialPrice":120}]; 
 

 

 
/** @function minItem */ 
 
const getPathValue = (src, path) => path.reduce((p, k) => typeof p === 'object' ? p[k] : p, src); 
 

 
const minItem = (array, ...args) => Math.min(...array.map((o) => getPathValue(o, args))); 
 

 
console.log(minItem(stops, 'duration', 'total'));