Javascript-在for循环中基于条件分配变量



我使用for循环为Highcharts数据分配条件下的某些变量。

其中一个我想分配的变量是linkedTo= ":previous",如果graphData.Title出现不止一次。我在现有的for循环中执行此逻辑时遇到问题。

例如,在第一个graphData.Title === "LOW"上,我希望linkedTo不存在。如果数组具有graphData.Title === "LOW",则一次分配变量linkedTo= ":previous"

我目前处理这一问题的方式是在LOW上创建一个条件,然后如果graphTitle为LOW且大于1,则具有另一个条件。

我期待着同样的结果出现在所有其他可能的情况下。

for (let i = 0; i < graphData.length; i++) {
let graphColor = "#000000";
let graphIndex = 0
let linkedTo = ""
if (graphData[i].title === "LOW") {
graphColor = "#0D6302";
graphIndex = 4;
} else if (graphData[i].Title === "LOW" && graphData[i].Title === "LOW" > 1) { 
graphColor = "#0D6302";
graphIndex = 4;
linkedTo = ":previous"
} else if (graphData[i].title === "MEDIUM-LOW") {
graphColor = "#0B7070";
graphIndex = 3;
} else if (graphData[i].title === "MEDIUM") {
graphColor = "#DC9603";
graphIndex = 2;
} else if (graphData[i].title === "MEDIUM-HIGH") {
graphColor = "#DD5F0C";
graphIndex = 1;
} else if (graphData[i].title === "HIGH") {
graphColor = "#C50710";
graphIndex = 0;
}

代码中有一些问题,主要是您将布尔值true与大于1进行比较(这是不可能的(,在进行更严格的检查之前先进行较小的检查(这意味着永远不会评估后者(。此外,标题没有被收集,所以支票本身有点荒谬。

if (graphData[i].title === "LOW") {     // <<< Less strict, blocks the next check
graphColor = "#0D6302";
graphIndex = 4;                     // The below is true > 1 
} else if (graphData[i].Title === "LOW" && graphData[i].Title === "LOW" > 1) { 

这里有一种替代方法,提供一个设置对象并收集标题来检查以前看到的标题的计数。我不太清楚graphColorgraphIndexlinkedTo变量是如何使用的,所以YMMV。

const titleSeen = title => titles.filter(titleSeen => titleSeen === title).length > 1
let settings = {
LOW: { color: '#0D6302', index: 4, linkedTo: null },
'MEDIUM-LOW': { color: '#0B7070', index: 3, linkedTo: null },
MEDIUM: { color: '#DC9603', index: 2, linkedTo: null },
'MEDIUM-HIGH': { color: '#DD5F0C', index: 1, linkedTo: null },
HIGH: { color: '#C50710', index: 0, linkedTo: null }
}
let titles = []
for (let i = 0; i < graphData.length; i++) {
let setting = { color: '#000000', index: 0, linkedTo: null }
let currentTitle = graphData[i].title
titles.push(currentTitle)
if (settings.hasOwnProperty(currentTitle)) {
setting = settings[currentTitle]
if (titleSeen(currentTitle)) {
setting.linkedTo = ':previous'
}
}
// setting would need to be used here somehow, due to the loop
}

最新更新