【问题标题】:Access object value with computed property keys使用计算的属性键访问对象值
【发布时间】:2017-10-19 10:45:23
【问题描述】:

我正在编写一个小助手,它应该获取数组的最小项。

该函数将Array 作为第一个参数和访问对象属性“rest”参数的“路径”。

例如:minItem(stops, 'duration', 'total');

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

预期:// 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');

【问题讨论】:

    标签: javascript object ecmascript-6


    【解决方案1】:

    在使用Array#map 创建的最小值数组上使用Math#min 获取最小值。要获取args 路径的值,可以使用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'));

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2022-11-17
      • 2018-01-22
      • 1970-01-01
      相关资源
      最近更新 更多