Проверьте, существует ли элемент в массиве, если печать не найдена - PullRequest
0 голосов
/ 09 мая 2020

Я новичок в JS. У меня есть задача:

Зная имена и номера телефонов, собрать телефонную книгу, в которой имена друзей сопоставлены с их соответствующими номерами телефонов. Затем вам будет предоставлено неизвестное количество имен для запроса в телефонной книге. Для каждого запрошенного распечатайте соответствующую запись из телефонной книги в новой строке в форме name = phoneNumber; если запись для не найдена, выведите вместо нее Not found.

Примечание: Ваша телефонная книга должна быть структурой данных Dictionary / Map / HashMap.

Формат ввода

Первая строка содержит целое число, обозначающее количество записей в телефонной книге. Каждая из последующих строк описывает запись в виде значений, разделенных пробелами, в одной строке. Первое значение - это имя друга, а второе - -di git номер телефона.

После строк записей телефонной книги находится неизвестное количество строк запросов. Каждая строка (запрос) содержит символ для поиска, и вы должны продолжать читать строки до тех пор, пока не закончится ввод.

Примечание. Имена состоят из строчных букв английского языка sh alphabeti c и являются только именами .

Вот мой код. Но я не могу проверить, существует ли имя в массиве или нет. Js включает не работает?

function processData(input) {
//Enter your code here
const  n = parseInt(input);
const  d = [];
for (var i = 1; i <= n; i++){
    var line = input.split('\n').splice(i,1);
    let x = line[0].split(" ");
    d[x[0]] = x[1];
}
console.log(d)
let m = n;
while (true){
    try{
        name = input.split('\n').splice(m+1,1);
        if ( d.includes(name)){
            console.log(name,'=',d[name])
        } else console.log('Not found')
        m +=1;
    }
    catch(err){
        break
    }
}

} ​​

1 Ответ

0 голосов
/ 09 мая 2020

name является результатом splice в массиве, что означает, что это массив, но вы заполнили d строками, поэтому d.includes(name) ищет вновь созданный массив внутри массива струн. Никакой массив никогда не будет равен строке (без преобразования, которое не выполняется includes).

Если вы имели в виду name как запись, которую вы удалили из массива с помощью splice (поскольку он возвращает массив удаленных записей), вам нужно будет использовать [0] в конце, чтобы получить его:

name = input.split('\n').splice(m+1,1)[0];
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^

Я не просматривал код для поиска других проблем, но это будет по крайней мере, ищите строку в массиве строк, а не ищите массив в массиве строк.


Боковое примечание: похоже, вы полагаетесь на получение ошибки, чтобы остановить ваш l oop, но имейте в виду, что доступ за пределы массива не является ошибкой в ​​JavaScript, вы просто получаете значение undefined.

...