假设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;
}
答案 0 :(得分:3)
只是为了证明我没有说谎它正在工作,调试器的屏幕截图。 我建议你仔细看看你传递的变量是什么。
像马修说的那样,你放弃了这个价值。在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 i
,i =
和return都在匿名函数中,它确实没有区别。