Вложенный цикл (FOR) с оператором IF внутри 2nd для вывода только одного результата - PullRequest
0 голосов
/ 01 июля 2019

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

Nasted loop js

for (x=0; x<causeoferrorlength; x++)
{
    document.getElementById("mdataresult").innerHTML += "x "+causeoferrorsplit[x]+"</br>";
    for(k=0; k<78; k++)
    {
        if ( causeoferrorsplit[x] === gbrucausesoferror[k][0] )
        {
            document.getElementById("mdataresult").innerHTML += "k "+gbrucausesoferror[k][0]+"</br>";
        }
    }
}

У меня нет ошибок с консоли, но она не печатается должным образом.

1 Ответ

1 голос
/ 01 июля 2019

Это, вероятно, лучше обрабатывать декларативным способом по сравнению с императивом . Это будет короче и легче рассуждать.

Учитывая, что вы используете два массива и что коды в первом массиве всегда будут находиться где-то во втором массиве:

let causes = ["001", "003", "005"];
let codes = [
        ["001","Earthquake"],
        ["002","Sunspots"],
        ["003","User Error"],
        ["004","Snakes"],
        ["005","Black Magic"]
];
let results = causes.map( cause => codes[ codes.findIndex( code => code[0] === cause ) ][1] );
console.log(results); // ["Earthquake", "User Error", "Black Magic"]

Что здесь происходит? Мы сопоставляем массив потенциальных причин ошибки (первый массив) со списком описаний, взятых из второго массива.

  • Array.map принимает функцию, которая вызывается один раз для каждого члена массива. Мы назовем этого члена «потому что».

  • Array.findIndex принимает функцию, которая вызывается один раз для каждого члена массива. Мы назовем этого члена «кодом».

  • Для каждой причины в причинах мы находим индекс в кодах, где первое значение массива равно причине, а затем возвращаем второе значение массива, описание.

Если у вас есть возможность изменить второй массив на объект, то это становится намного проще:

let causes = ["001", "003", "005"];
let codes = {
  "001":"Earthquake",
  "002":"Sunspots",
  "003":"User Error",
  "004":"Snakes",
  "005":"Black Magic"
};
let results = causes.map( cause => codes[cause] );
console.log(results); // ["Earthquake", "User Error", "Black Magic"]
...