javascript - 我如何使用 .map()、.reduce() 和 .filter() 来代替 forEach 来使我的代码简洁以免脆弱?

标签 javascript dictionary filter foreach reduce

我正在获取一个对象数组(let raw),通过displayName获取值并通过displayName将其插入到(const defaultCirclePackStructure)中,这是用于d3圆形包装。这是Codepen

let convertMetricDataToD3 = (arrayMetricData) => {
  var circlePackData = defaultCirclePackStructure
  let operationSumTime = 0

  arrayMetricData.forEach(element => {
    insertMetricData(element, circlePackData)
    if(element.displayName === "Equipment Uptime" || element.displayName === "Equipment  Downtime"){
      operationSumTime+=element.value
    }
  });

  circlePackData.children[0].children[1].value = 
Math.round(operationSumTime) + "%"
  return circlePackData;
}

它确实有效,但它非常脆弱且效率低下,我如何通过使用 map、reduce、filter 或其他任何东西来改进它。

最佳答案

离开你的笔,我能够创建以下更易于维护的内容。

const convertMetricDataToD3 = (arrayMetricData) => {

  const circlePackData = defaultCirclePackStructure;
  arrayMetricData.forEach(element => insertMetricData(element, circlePackData));

  const trackedOperations = [
    'Equipment Uptime',
    'Equipment Downtime',
  ];

  const operationSumTime = arrayMetricData
    .filter(({displayName}) => trackedOperations.includes(displayName))
    .map(({value})=> value)
    .reduce((a, b) => a + b);

  circlePackData.children[0].children[1].value = Math.round(operationSumTime) + "%";

  return circlePackData;
}

关于javascript - 我如何使用 .map()、.reduce() 和 .filter() 来代替 forEach 来使我的代码简洁以免脆弱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55211414/

相关文章:

javascript - XMLHttpRequest/ajax 设置内容类型

javascript - 如何使用 Javascript 从 HTML 页面中的 <SCRIPT> 标记获取特定数据

javascript - PyQt 中的评估JavaScript - 未调用函数

python - 嵌套字典检查键值

c# - 如何在 C# 中使用 between 过滤数据表

ruby-on-rails-4 - 事件管理员自定义过滤器仅特定属性

javascript - 可以将数字存储为 float 吗?

c++ find()用于成员函数的映射

C# 通用字典 TryGetValue 找不到键

list - F# 过滤子列表