JavaScript-кодирование интервью с первым повторяющимся символом в массиве не работает для нуля - PullRequest
0 голосов
/ 06 июня 2018

ПРОБЛЕМА

Я не уверен, что я делаю здесь не так.Я выполняю задачу кодирования на CodeFights , используя ванильный JavaScript для поиска и возврата первого повторяющегося элемента в массиве.Мой код работает для 2 тестовых массивов (a и c), но не для случая, когда нет повторяющихся элементов .

МОЙ КОД

console.clear();

var a = [2, 1, 3, 5, 3, 2];
var b = [2, 4, 3, 5, 1];
var c = ["apple", "orange", "grape", "orange", "grape"];

// create an object to store the counts
var counts = {};

function firstDuplicate(arr) {
    
    // loop through passed array of numbers
    for (var i=0; i<a.length; i++) {
        
        var num = arr[i];
        
        if (counts[num] === undefined) {
            counts[num] = 1;
        } else if (counts[num] == 1) {
            ++counts[num];
            return num;
        }
                
    }
    
    return -1;
    
}

console.log(firstDuplicate(a)); // 3
console.log(firstDuplicate(b)); // -1
console.log(firstDuplicate(c)); // orange

МОЙ ВОПРОС

Я знаю, что мой код в основном правильный, так что я пропустил / или я что-то потерял?Как заставить работать «нулевой» случай (когда нет повторяющихся символов).

1 Ответ

0 голосов
/ 06 июня 2018

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

Вы также ссылаетесь на a в цикле for, но должны ссылаться на параметр функции arr.

var a = [2, 1, 3, 5, 3, 2];
var b = [2, 4, 3, 5, 1];
var c = ["apple", "orange", "grape", "orange", "grape"];

function firstDuplicate(arr) {

    // move this definition inside the function so that each
    // time you call firstDuplicate() you get a new counts object.
    var counts = {};

    // use arr.length so that you are iterating through the arr parameter
    for (var i=0; i<arr.length; i++) {

        var num = arr[i];

        if (counts[num] === undefined) {
            counts[num] = 1;
        } else if (counts[num] == 1) {
            ++counts[num];
            return num;
        }

    }

    return -1;

}

console.log(firstDuplicate(a)); // 3
console.log(firstDuplicate(b)); // -1
console.log(firstDuplicate(c)); // orange
...