如何优化多个Array.find()

Ras*_*ukh 2 javascript arrays json node.js

我有 JSON:(它有太多行,但粘贴整个 json 太长)

"data": {
  "rows": [
      {
          "row_no": "130",
          "sum_begin_period": "3234122.29",
          "sum_end_period": "3099063"
      },
      {
          "row_no": "150",
          "sum_begin_period": "1252394",
          "sum_end_period": "986382"
      },
      {
          "row_no": "160",
          "sum_begin_period": "1321400.28",
          "sum_end_period": "1321400"
      },
      {
          "row_no": "210",
          "sum_begin_period": "3367691.4",
          "sum_end_period": "1282444"
      },
      {
          "row_no": "220",
          "sum_begin_period": "2320199.07",
          "sum_end_period": "265000"
      },
      {
          "row_no": "260",
          "sum_begin_period": "1047492.33",
          "sum_end_period": "1017444"
      },
      {
          "row_no": "610",
          "sum_begin_period": "825495.3",
          "sum_end_period": "960385"
      }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我需要进行一些数学运算,需要来自多行的值。我怎样才能优雅地做到这一点?
到目前为止我已经尝试过:
使用 Array.find():

let ccScore;
  for(const row of finance_report){

    const satr_390_1 = finance_report.find((row) => row.row_no === "390");
    const satr_190_1 = finance_report.find((row) => row.row_no === "190");
    const satr_211_1 = finance_report.find((row) => row.row_no === "211");
    const satr_600_1 = finance_report.find((row) => row.row_no === "600");

    if (satr_600_1== 0) return 1;

    ccScore = (satr_390_1 - satr_190_1- satr_211_1) / satr_600_1;

    if (ccScore < 0.5) return 1;
    else if (ccScore >= 0.5 && ccScore < 2) return 3;
    else if (ccScore >= 2) return 5;
  }
Run Code Online (Sandbox Code Playgroud)

上述的缺点是 Array.find 重复次数太多。
with Array.maps():(在 .map() 回调中使用 IF 语句进行搜索)

 let accounting_factor;

  accounting_report.map((row) => {
    let summ = 0;
    if (row.row_no === "480") summ += parseInt(row.sum_end_period);
    if (row.row_no === "490") summ += parseInt(row.sum_end_period);

    if (row.row_no === "130") {
      accounting_factor =
        parseInt(row.sum_end_period) > parseInt(summ) ? false : true;
    }
  });
Run Code Online (Sandbox Code Playgroud)

上述的缺点是如果重复。
是否有一种更优雅的方法,它不会强迫我重复我的代码,并使我能够使用某些 rows.row_no 提取对象(从“行”数组中)然后进行操作?
PS如果Array.reduce()可以解决这个问题,我会很感激一个例子

小智 5

重组数据如下

let rows = {}

original.data.rows.forEach(row => rows[row.row_no] = row)

// USAGE
rows[ROW_NUM].sum_end_period
Run Code Online (Sandbox Code Playgroud)

您可以尝试一下,我相信它会更快,因为键值元组是索引对象,并且程序不必迭代数组中的每个元素。