Я работаю над вызовом coderbyte под названием SecondGreatLow. Нам присваивается массив чисел в качестве параметра и предполагается, что он будет возвращать второй самый низкий # и второй наивысший # из данного массива.Javascript: Сложность анализа кода, содержащего indexOf в цикле for
Я использую чей-то код - я анализирую/реконструирую его, но меня смущает одна часть. Вот код:
function SecondGreatLow(arr) {
var unique = [arr[0]];
for(var i = 1; i < arr.length; i++) {
if (unique.indexOf(arr[i]) == -1) {
unique.push(arr[i]);
}
}
unique.sort(function(a,b){return a - b});
var smallest = unique[1].toString();
unique.reverse();
var largest = unique[1].toString();
return smallest + " " + largest;
}
У меня возникли трудности с первой половины кода - в частности заявление IndexOf.
Из чтения ч/б строк и глядя на нижнюю половину кода, я считаю, что первая верхняя половина кода избавляется от всех значений повторения? - Все оставшиеся не повторяющиеся значения попадают в уникальный массив, где мы получаем 2-й самый низкий (уникальный [1]) и второй по высоте (уникальный [1] по обратному массиву).
Но что делает это утверждение if-do ???
Я знаю, что если indexOf == -1, то это означает, что поиск определенного элемента не найден.
Но если мы идем через это шаг за шагом ...
var unique = [arr[0]];
^Это берет значение 1-го элемента в заданном массиве/параметра и сохранения его в массиве с именем «уникальный»
Тогда есть для цикла, который начинается с индексом 1 (а не 0)
for(var i = 1; i < arr.length; i++) {
^Таким образом, цикл выполняется через исходный массив, который был предоставлен в качестве параметра (а не через й уникальный массив). Но это, где я получаю confused-
if (unique.indexOf(arr[i]) == -1) {
unique.push(arr[i]);
Итак, давайте говорить, что мы собираемся через 1 итерации для петли и я = 1 ... Мы хотим, чтобы найти индекс обр [1], который будет вторым значением массива. НО КОТОРАЯ МАССА? Метод indexOf запускается на «уникальном», так что мы находим индекс второго значения уникального массива (который в настоящее время имеет только (arr [0])? Или мы находим индекс второго значения массив, который был передан как параметр?
В первом массиве нет 1-го элемента/значения в 1-м прогоне через цикл for (так как есть только 1 значение), поэтому мы будем толкать этот элемент/добавление что элемент уникального массива.
в принципе, я запутался, что верхняя половина коды на самом деле делает. Любая помощь будет оценена.
Если вы хотите использовать пример, я думаю, , предположим, что массив [7, 7, 12, 98, 106] передан как параметр ...
Спасибо заранее ...
Спасибо. Наверно, я заслужил -1 за мой вопрос - может быть, это глупый вопрос? hahah – Seeeyonnn
Есть ли что-нибудь, что я могу заменить вместо indexOf в инструкции if? Например, if (arr [i]! = __________) есть ли способ сказать, если (элемент массива) не равен (любой элемент, который уже находится в уникальном массиве) ??? – Seeeyonnn
Есть и другие вещи, которые вы можете заменить, но indexOf будет самым простым. Если вы хотите включить другую библиотеку javascript, функция underscore.js имеет функцию contains. Есть ли причина, по которой вы хотите избежать indexOf? – damienc88