TypeError: undefined не является объектом - при оценке массива с помощью forEach - PullRequest
0 голосов
/ 11 сентября 2018

Я создаю панель поиска, и у меня странная ошибка, которая не была устранена многочисленными другими сообщениями с той же ошибкой.У меня есть массив, и я использую forEach для входа в консоль в зависимости от index массива.Тем не менее я получаю эту ошибку:

TypeError: undefined is not an object (evaluating 'sites[index].indexOf')

Мой код выглядит следующим образом:

var sites = ["Website 1", "Website 2", "Youtube Test Page", "Go to google", "testing for foreward slashes", "MORE!!! :)", "beachballs", "test2", "Good Luck"];

function search() {
    var input = $("#searchBar")[0].value;
    sites.forEach(function(index) {
        console.log(input);
        if (sites[index].indexOf(input) != -1) {
            console.log("yay");
        }
    })
}

И вот моя строка поиска:

<input type="text" placeholder="Search the web" id="searchBar" onkeyup="search()"/>

У меня естьЯ провел много исследований безрезультатно, поэтому я был бы признателен за помощь.

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018
var sites = ["Website 1", "Website 2", "Youtube Test Page", "Go to google", "testing for foreward slashes", "MORE!!! :)", "beachballs", "test2", "Good Luck"];

function search() {
    var input = $("#searchBar")[0].value;
    sites.forEach(function(value,index) {
        console.log(input);
        if (sites[index].indexOf(input) != -1) {
            console.log("yay");
        }
    })
}
0 голосов
/ 11 сентября 2018

Обратный вызов Array.forEach имеет 3 параметра.

обратный вызов вызывается с тремя аргументами:

значение элемента

the индекс элемента

проходящий массив

arr.forEach(function callback(currentValue[, index[, array]]) {
    //your iterator
});

, поскольку для вашего случая вам нужен только первый параметр currentValue.

Подробнее Array.prototype.forEach () - Javascript |MDN

0 голосов
/ 11 сентября 2018

sites - это массив , а не коллекция jQuery, поэтому, когда вы вызываете forEach для него, первый аргумент для обратного вызова - это элемент , повторяющийся по ,не индекс.Изменить на:

sites.forEach(function(site) {
    console.log(site);
    if (site.indexOf(input) != -1) {
        console.log("yay");
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...