JavaScript没有返回int ..至少在我认为应该是这样的时候

时间:2010-11-06 23:12:27

标签: javascript

假设arr是一个对象数组。

arr = // some items;

function findItem( source, item ) {
  return source.indexOf(item);
}

现在,我知道代码是正确的,它确实找到了正确的索引,但我得到了一个'undefined'响应。但是,如果我这样做..

function findItem( source, item ) {
  var i = 0;
  i = source.indexOf(item);
  return i;
}

我得到了正确的索引。

我甚至尝试过。

function findItem(source, item) {
 return parseInt( source.indexOf(item) );
}

我仍然得到'undefined'。

有人能告诉我世界上发生了什么吗?

好的,为了让事情变得更简单,我会在这里发布更多代码。

        function init() {
            alert(discoverWithoutVar());
            alert(discoverWithVar());
        }
        function discoverWithoutVar() {
            var arr = [{ Name: "Stacey" }, { Name: "Ciel" }, { Name: "Derek" }, { Name: "Christi"}];

            // find the index of 'Ciel'
            arrayForEach(arr, function (e) {
                if (e.Name == "Ciel") {
                    return arrayIndexOf(arr, e);
                }
            });
        }
        function discoverWithVar() {
            var arr = [{ Name: "Stacey" }, { Name: "Ciel" }, { Name: "Derek" }, { Name: "Christi"}];

            var i = 0;
            // find the index of 'Ciel'
            arrayForEach(arr, function (e) {
                if (e.Name == "Ciel") {
                    i = arrayIndexOf(arr, e);
                }
            });

            return i;
        }
        function arrayForEach(array, action) {
            for (var i = 0, j = array.length; i < j; i++)
                action(array[i]);
        }

        function arrayIndexOf(array, item) {
            if (typeof array.indexOf == "function")
                return array.indexOf(item);
            for (var i = 0, j = array.length; i < j; i++)
                if (array[i] == item)
                    return i;
            return -1;
        }

2 个答案:

答案 0 :(得分:3)

只是为了证明我没有说谎它正在工作,调试器的屏幕截图。 我建议你仔细看看你传递的变量是什么。

alt text

像马修说的那样,你放弃了这个价值。在arrayForEach上添加一个返回值将返回函数找到的值。

答案 1 :(得分:2)

这就是为什么你应该发布你测试过的真实代码。如果您想简化,请尽可能简单,而仍然显示问题。然后张贴。

    function discoverWithoutVar() {
        var arr = [{ Name: "Stacey" }, { Name: "Ciel" }, { Name: "Derek" }, { Name: "Christi"}];

        // find the index of 'Ciel'
        arrayForEach(arr, function (e) {
            if (e.Name == "Ciel") {
                return arrayIndexOf(arr, e);
            }
        });
    }

是错误的,因为你只是从你传递给for each的匿名函数返回(而不是从discoverWithoutVar)。

function arrayForEach(array, action) {
    for (var i = 0, j = array.length; i < j; i++)
        action(array[i]); // The value you return is being discarded here
}

只需使用常规for循环:

for(var i = 0; i < arr.length; i++)
{
  if (arr[i].Name == "Ciel") {
    return arrayIndexOf(arr, e);
  }
}

var i使其工作的原因是i被关闭到匿名函数中。然后,您将其设置在内部,但从外部函数返回。如果var ii =和return都在匿名函数中,它确实没有区别。