function checkValues(data, key) {
data.forEach(function(d, i) {
if (d == key) {
console.log(i + "\n");
return i;
}
});
return -1;
}
var arr = [2, 3, 7, 1];
var x = 1;
if (x == 2) {
console.log("if!");
}
else if (checkValues(arr, x) != -1) {
console.log("else if!");
}
else {
console.log("else!");
}
它进入了else块。我当然希望这不是一件明显的事情。
答案 0 :(得分:4)
return
回调中的.forEach()
仅返回.forEach
机制;它不会导致从checkValues()
返回。
我想你想要.findIndex()
:
function checkValues(data, key) {
return data.findIndex(function(d) {
return (d == key);
});
}
不幸的是,Internet Explorer不支持.findIndex()
(至少就上次MDN更新而言),但MDN页面不支持there is a polyfill available。
答案 1 :(得分:1)
您在forEach循环的回调中使用的返回实际上并没有中断对checkValues的整个调用,因为它位于forEach
的执行上下文中。因此,您的代码始终返回-1 。
更好的方法是存储价值。
function checkValues(data, key) {
var index = -1;
data.forEach(function(d, i) {
if (d == key) {
index = i;
}
});
return index ;
}
但是,重构可能会更进一步。 indexOf
确实可以处理像这样的原始值的数组。你可以这样做:
function checkValues(data,key){
return data.indexOf(key);
}
一个简单的检查是[2, 3, 7, 1].indexOf(1)
,产生3
。