我有这个代码,而且它没有通过for循环中的'else'情况。
function ArithGeo(arr)
{
var arithStep = 0, geoStep = 0, arith = [], geo = [];
for (var i = 0; i < arr.length; i++)
{
if (i === 0)
{
arithStep = arr[i + 1] - arr[i];
geoStep = arr[i + 1] / arr[i];
}
else
{
// Not going here.
console.log("i !== 0");
if (arr[i] - arr[i - 1] !== arithStep)
arith.push("false");
console.log(arr[i] / arr[i - 1]);
if (arr[i] / arr[i - 1] !== geoStep)
geo.push("false");
}
if (geo.indexOf("false") == -1)
return "Geometric";
else if (arith.indexOf("false") == -1)
return "Arithmetic";
else
return -1;
}
}
// Arithmetic example: [2, 4, 6, 8] and Geometric example: [2, 6, 18, 54].
console.log(ArithGeo([2, 4, 8, 15]));
也尝试了else if (i !== 0)
,但也没有触发阻止。
答案 0 :(得分:2)
因为您在第一次迭代中返回。这会导致引擎完全离开该功能,因此在此之后它甚至没有机会测试i
。
尝试将第二个if
/ else
块移到for
循环之后:
for (var i = 0; i < arr.length; i++) {
if (i === 0) {
...
} else {
...
}
}
if (geo.indexOf("false") == -1) {
return "Geometric";
} else if (arith.indexOf("false") == -1) {
return "Arithmetic";
} else {
return -1;
}
另外,您可以使用布尔值而不是数组来改进此算法。最初只需将geo
和arith
设置为true
,如果您碰巧找到非几何/非算术步骤,请将它们设置为false
。这也可以更容易地使代码中的某些评估短路。例如,当你知道它不是几何或算术序列时,你可以立即突破循环。