TypeError:undefined不是对象-使用forEach评估数组时

时间:2018-09-11 05:08:50

标签: javascript jquery foreach

我正在制作一个搜索栏,但出现了一个奇怪的错误,而该错误尚未被众多其他相同错误的帖子解决。我有一个数组,并且我正在使用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 :(得分:6)

sites是一个 array ,而不是jQuery集合,因此,当您在其上调用forEach时,回调的第一个参数是要迭代的 item ,而不是索引。更改为:

sites.forEach(function(site) {
    console.log(site);
    if (site.indexOf(input) != -1) {
        console.log("yay");
    }
})

答案 1 :(得分:1)

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");
        }
    })
}

答案 2 :(得分:1)

Array.forEach回调具有3个参数。

  

使用三个参数调用回调:

     

元素值

     

元素索引

     

要遍历的数组

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

根据您的情况,您只需要第一个参数currentValue

了解更多Array.prototype.forEach() - Javascript | MDN