Is_sub-array - не возвращает false
Привет. Я пытаюсь запустить программу под названием IsSubArray. Есть 2 входных текстовых поля. Один из них называется большим массивом, а другой-суб-массивом. Задача состоит в том, чтобы проверить, соответствуют ли значения в суб-массиве последовательно числам в большом массиве. Например:
Массив 1: 1,3,6,5,4
Массив 2: 1,3,6 - верно, потому что 1,3 совпадает с массивом 1.
Массив 2: 1,6 - ложь, потому что после 1 в массиве 1 нет 6. Он должен совпадать последовательно.
Массив 2: 6,5,4 - верно.
Массив 2: 5,4,7 - ложь, потому что в массиве 1 нет числа 7 после 4.
Но я становлюсь правдивым для этого последнего утверждения. Я не могу понять почему.
Заранее спасибо :)
function IsSubArray() { inputArray1 = document.getElementById("inputText1").value.split(","); inputArray2 = document.getElementById("inputText2").value.split(","); var msg = false; for (j = 0; j < inputArray2.length - 1; j++) { if (j > 0 && msg == false) break; for (i = 0; i < inputArray1.length - 1; i++) { if (inputArray2[j] == inputArray1[i] && inputArray2[j + 1] != inputArray1[i + 1]) { msg = false; break; } else if (inputArray2[j] == inputArray1[i] && inputArray2[j + 1] == inputArray1[i + 1]) { msg = true; break; } } } document.getElementById("output").value = msg + " : LongArray: " + inputArray1 + " , ShortArray: " + inputArray2; }
Что я уже пробовал:
Пока все работает, кроме последнего утверждения.
F-ES Sitecore
Если вы используете отладчик javascript, вы можете пройти через свой код строка за строкой, чтобы увидеть, почему он не работает. При сравнении последних двух элементов в массиве, поскольку они совпадают с первыми двумя элементами во втором массиве msg устанавливается в true, и ничто другое не устанавливает его в false после этого.
Я думаю, что вы должны придумать более простой и надежный алгоритм. Возможно, цикл массива 1 до тех пор, пока вы не найдете первый элемент в массиве 2, а затем есть цикл, который проходит через остальную часть массива 2, чтобы убедиться, что каждый элемент соответствует следующему элементу в массиве 1 тоже.
W∴ Balboos, GHB
Кроме того: для небольших массивов, показанных на рисунке, это было бы нормально. Однако если сопоставление не удается, то поиск должен продолжаться сразу после последнего первоначальный сопоставьте, чтобы увидеть, существует ли подстрока еще дальше по большой строке. Просто заметив, на самом деле для первоначального вопрошающего, что "это не закончится, пока не закончится"