![](/img/trans.png)
[英]How can I refactor this JavaScript code to avoid making functions in a loop?
[英]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.