这个indexOf实现有什么问题?

时间:2015-05-15 20:16:02

标签: javascript

我知道在找不到值时我会忽略-1选项,但是当值在数组中时,为什么它不起作用?它应该返回1,但是返回undefined。

function each(collection, callback) {
  if (Array.isArray(collection)) {
    for (var i = 0; i < collection.length; i++) {
      callback(collection[i], i, collection);
    }
  }
  else {
    for (var prop in collection) {
      callback(collection[prop], prop, collection);
    }
  }
}

function indexOf(array, value) {
  each(array, function(e, index) {
    if (e === value) {
      return index; 
    }
  })
}


console.log(indexOf([1, 2, 3, 4, 5], 2)); ---->>> undefined;

5 个答案:

答案 0 :(得分:1)

您在回调中返回索引值,而不是在indexOf()函数本身内。

尝试此实施:

function indexOf(array, value) {
   var returnVal = -1;
   each(array, function(e, index) {
        if (e === value) {
            returnVal = index; 
            return false;
        }
    });
    return returnVal;
}
编辑:正如Barmar所指出的,这将返回元素最后一次出现的索引,以返回第一次出现的索引,您还必须将each()更新为:< / p>
function each(collection, callback) {
    if (Array.isArray(collection)) {
        for (var i = 0; i < collection.length; i++) {
            if (callback(collection[i], i, collection) === false) break;
        }
    }
    else {
        for (var prop in collection) {
            if (callback(collection[prop], prop, collection) === false) break;
        }
    }
}

答案 1 :(得分:1)

function indexOf(array, value) {
  each(array, function(e, index) {
    if (e === value) {
      return index; 
    }
  })
}

此处的返回值是从传递给each的函数返回,而不是从indexOf函数返回。您需要以某种方式在该函数范围之外获取该值以返回。根据你当前的每个实现,你将无法打破循环,所以你必须做这样的事情:

function indexOf(array, value) {
  var result = -1;

  each(array, function(e, index) {
    if (e === value) {
      result = index; 
    }
  })

  return result;
}

http://jsfiddle.net/efzogzxq/

答案 2 :(得分:1)

您的ParsePushBroadcastReceiver功能不会返回任何内容。如果找到,则回调将返回索引,但您没有对该值执行任何操作。你可以这样做:

onReceive

答案 3 :(得分:1)

如果找到,您将要返回索引。此外,您需要在找到值后退出循环,否则您将执行lastIndexOf而不是indexOf

function each(collection, callback) {
    if (Array.isArray(collection)) {
        for (var i = 0; i < collection.length; i++) {
            if (callback(collection[i], i, collection) === true) {
                return;
            }
        }
    }
    else {
        for (var prop in collection) {
            if (callback(collection[prop], prop, collection) === true) {
                return;
            }
        }
    }
}

function indexOf(array, value) {
    var foundIndex = -1;

    each(array, function(e, index) {
        if (e === value) {
            foundIndex = index;
            return true;
        }
    });

    return foundIndex;
}

答案 4 :(得分:1)

indexOf函数总是返回undefined,因为你只是从回调函数返回一个值,而不是indexOf函数。

试试这个:

function indexOf(array, value) {
    var i;

    each(array, function(e, index) {
        if (e === value) {
            i = index; 
        }
    })

   return i;
}