我应该如何重构Java中的评估循环?

时间:2018-12-28 21:50:00

标签: javascript arrays

我继承了具有这种代码风格且没有测试的代码库:

  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);

2 个答案:

答案 0 :(得分:1)

您可以将所有数组收集在一个数组中,并通过获取索引进行推送。

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]
    });
}

答案 1 :(得分:1)

初始代码似乎有些奇怪。您有一个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]
}])