我继承了具有这种代码风格且没有测试的代码库:
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);
答案 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]
}])