簡體   English   中英

我應該如何重構 Javascript 中的 eval 循環?

[英]How should I refactor an eval loop in Javascript?

我繼承了一個具有這種代碼風格且沒有測試的代碼庫:

  var series1 = [];
  var series2 = [];
  var series3 = [];
  var series4 = [];
  var series5 = [];
  var series6 = [];
  var series7 = [];
  var series8 = [];
  for (var y = 1; y <= seriesData.length; y++) {
      // columns are series
      eval("series" + y).push({
        label: "series" + y,
        lineColor: colorArr[seriesData[y - 1].colorIndex],
        x: sampleTime,
        y: rows[x][seriesData[y - 1].index]
      });
  } 

主要問題是我們將開始容納超過 8 組數據。 就我個人而言,我不太欣賞這種風格的代碼,而且我已經閱讀過eval函數在 JS 中可能是有害的。 有沒有更好的方法來重構這個?

我試過的:

  let multiarr = []
  for (var y = 1; y <= seriesData.length; y++) {
    // columns are series
    let arr = [];
    arr.push({
      label: "series" + y,
      lineColor: colorArr[seriesData[y - 1].colorIndex],
      x: sampleTime,
      y: rows[x][seriesData[y - 1].index]
    });

  }
  multiarr.push(arr);

您可以將所有數組收集在一個數組中並通過獲取索引進行推送。

var series1 = [],
    series2 = [],
    series3 = [],
    series4 = [],
    series5 = [],
    series6 = [],
    series7 = [],
    series8 = [],
    data = [series1, series2, series3, series4, series5, series6, series7, series8];

for (var y = 0; y < seriesData.length; y++) {
    data[y].push({
        label: "series" + (y + 1),
        lineColor: colorArr[seriesData[y].colorIndex],
        x: sampleTime,
        y: rows[x][seriesData[y].index]
    });
}

最初的代碼看起來有點奇怪。 您有一個series數組塊,但每個數組只被一個項目推送。 難道不能簡單地簡化為:

const result = seriesData.map((item, i) => ({
  label: `series${i + i}`,
  lineColor: colorArr[item.colorIndex],
  x: sampleTime,
  y: rows[x][item.index]
}))

如果出於某種原因,您確實需要每個項目本身都是一個數組,請執行以下操作:

const multiarr = seriesData.map((item, i) => [{
  label: `series${i + i}`,
  lineColor: colorArr[item.colorIndex],
  x: sampleTime,
  y: rows[x][item.index]
}])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM