我知道在找不到值时我会忽略-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;
答案 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;
}
答案 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;
}