Javascript - Назначение переменных на основе условия в цикле for - PullRequest
0 голосов
/ 08 мая 2020

Я использую для l oop, чтобы присвоить моим данным Highcharts определенные переменные при условии.

Одна из этих переменных, которую я хотел бы назначить, - это linkedTo= ":previous" IF graphData.Title появляется более одного раза. У меня проблемы с выполнением этого logi c в моем существующем для l oop.

Например, на первом graphData.Title === "LOW" я бы хотел, чтобы connectedTo не существовал. Если в массиве graphData.Title === "LOW" больше, чем один раз, назначьте переменную linkedTo= ":previous"

Способ, которым я сейчас занимаюсь, создает условие для LOW, а затем имеет другое условие, если graphTitle составляет LOW и больше затем я присваиваю ему переменную connectedTo.

Я ожидаю того же результата для всех других возможных условий в заголовке.

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

1 Ответ

0 голосов
/ 08 мая 2020

Есть несколько проблем с кодом, в основном это то, что вы сравниваете логическое значение true, которое больше единицы (невозможно), и меньшая проверка предшествует более строгой проверке (то есть последняя никогда не будет оцениваться) . Кроме того, заголовки не собираются, поэтому сама проверка немного абсурдна.

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

Вот альтернативный подход, предоставляющий объект настроек и сбор заголовков для проверки количества ранее просмотренных заголовков. Я не совсем знаю logi c того, как использовались переменные graphColor, graphIndex и linkedTo, поэтому 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
}
...