获得;“未定义”;重写Javascript中的ux.find函数时

获得;“未定义”;重写Javascript中的ux.find函数时,javascript,functional-programming,underscore.js,Javascript,Functional Programming,Underscore.js,我正试图重写下划线u.find(),以便练习,但在运行它时却变得不精确。代码如下: // _.find(list, predicate, context); var findIt = function(list, predicate) { for (var i = 0; i < i.length; i++) { if (predicate(list[i]) == true) {return i;} else{return

我正试图重写下划线u.find(),以便练习,但在运行它时却变得不精确。代码如下:

// _.find(list, predicate, context);

var findIt = function(list, predicate) {
    for (var i = 0; i < i.length; i++) {
        if (predicate(list[i]) == true) 
            {return i;} 
        else{return false;}
    }
}

var predicate = function (first) {
    return first % 2 == 0;
}

console.log(findIt(arr, predicate));

var arr = [1, 2, 3, 5]; 
/\查找(列表、谓词、上下文);
var findIt=函数(列表,谓词){
对于(变量i=0;i

这里出了什么问题?

代码中的问题列表

  • 只有在将值传递给
    findIt
    函数之后,才将值赋值给
    arr
    。因此,它将具有默认值
    undefined

  • 在for循环中,如果第一个元素与预期的元素不匹配,则立即返回
    false
    ,但在返回
    false
    之前,应该检查所有元素

  • 循环必须在
    列表的长度上运行,但您使用的是
    i.length
    ,这将不起作用,因为
    i
    是一个数字,并且它没有
    length
    属性


  • 您使用的是
    i.length
    ,但是
    i
    不是列表

    当您知道所有项都不匹配时,应该返回在循环后未找到匹配项,而不是在第一次匹配失败时

    要匹配
    \u find
    方法所做的,它应该返回项,而不是项的索引,如果不匹配,则返回
    未定义的

    在给变量赋值之前,您正在使用变量
    arr

    var findIt = function(list, predicate) {
        for (var i = 0; i < list.length; i++) {
          if (predicate(list[i]) == true) {
            return list[i];
          }
        }
        return undefined;
    }
    
    var predicate = function (first) {
        return first % 2 == 0;
    }
    
    var arr = [1, 2, 3, 5];
    
    console.log(findIt(arr, predicate));
    
    var findIt=函数(列表,谓词){
    对于(变量i=0;i