2013-12-02 3 views
0

Это для вызова кодера, который я закончил некоторое время назад. Ваша функция должна получить вторую величайшие и второй низкие цифры Вот что я первоначально использовали:confused about indexOf (array [0])

function SecondGreatLow(arr){ 
    var sorted = arr.sort(function(a,b){ 
    return a-b; 
    }); 
    return sorted[1] + " " + sorted[arr.length - 2]; 
} 
SecondGreatLow(readline());   

я получил два случая плохого в этой функции одной из них ([2,2,2,5,5, 5,6]), потому что есть повторяющиеся числа. Я реализовал это в мой новый код:

function SecondGreatLow(arr) { 
    var exclude = [arr[0]]; 
    for(var i = 1; i < arr.length; i++) { 
    if (exclude.indexOf(arr[i]) == -1) { 
     exclude.push(arr[i]); 
    } 
    } 
    return exclude 
} 
SecondGreatLow([33,33,33,44,44,44,55,55,6,4,3]) 

Мой вопрос, как же это найти все дубликаты номеров? Не исключена ли переменная (arr [0]) 33? Я смущен, как это избавится от всех повторяющихся чисел.

+4

Я тоже смущен. Я не вижу, где определен 'unique'. Код должен вызывать 'ReferenceError'. –

+0

oops sorry отредактировал это у меня было старое имя переменной там должно быть понятно сейчас –

+1

ОК, поэтому я предполагаю, что имя функции теперь неправильно. Функция возвращает уникальные значения массива, а не второе и второе наименьшее значение. Верный? –

ответ

0

Мой вопрос в том, как это найти все повторяющиеся номера?

На самом деле он не находит повторяющихся значений, он собирает уникальные значения.

Вы перебираете исходный массив и добавляете только значения exclude, которых еще нет в exclude. Это гарантирует, что каждое значение в exclude уникально.

Мой вопрос заключается в том, как он это делает, если исключить первоначально только обр [0] или 33

Эта линия:

var exclude = [arr[0]]; 

он просто привык не начать с пустой массив. Как вы можете видеть в for заявлении

for(var i = 1; i < arr.length; i++) { 

код начинает итерацию по индексу 1, не 0. Кроме того, можно просто начали с пустым массивом:

var exclude = []; 
for(var i = 0; i < arr.length; i++) { 

, но это немного расточительно, так как вы знаете, что первое значение будет добавлено к exclude в любом случае.

0

Как работает этот код, но добавление новых переменных в массив исключает. Он добавит только новую переменную, если текущая переменная еще не существует в массиве exclude. Линия:

exclude.indexOf(arr[i]) == -1 

что делает основную работу. Он находит переменную i и проверяет, существует ли она в массиве exclude. Если он не существует IndexOf возвращает -1, таким образом, если утверждение верно, и мы идем в линию

exclude.push(arr[i]); 

и добавить переменную в массив исключить.

0

В приведенном ниже петле

for(var i = 1; i < arr.length; i++) { 
    if (exclude.indexOf(arr[i]) == -1) { 
     exclude.push(arr[i]); 
    } 
} 

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

Метод indexOf() ищет массив для указанного элемента и возвращает его позицию. поэтому в случае повторяющихся чисел он не будет возвращаться -1, поэтому приведенная выше логика пропустит добавление дублирующего числа к переменной exculde. Более подробную информацию вы можете найти ниже.

http://www.w3schools.com/jsref/jsref_indexof_array.asp