使用下面的对象和方法,为什么console.log(FizzBuzzPlus.getFizzBuzzCount(20))
会打印0?
var FizzBuzzPlus = {
isFizzBuzzie: function(a) {
if(a%5 === 0 || a%3 === 0) {
if (a%5 === 0 && a%3 === 0) {
return false;
}
return true;
} else {
return false;
}
},
isFizzBuzzieChecker: function(c) {
var theFizzBuzzes = [];
for (var i = 0; i < c; i++) {
if (this.isFizzBuzzie(i)) {
theFizzBuzzes += i + " ";
}
}
return theFizzBuzzes;
},
getFizzBuzzSum: function(b) {
var sum = 0;
for (var i = 0; i < b; i++) {
if (this.isFizzBuzzie(i)) {
sum += i;
}
}
return sum;
},
getFizzBuzzCount: function(c) {
var count = 0;
for (var i = 0; i < c; i++) {
if (this.isFizzBuzzie(i)) {
count++;
}
return count;
}
}
};
console.log(FizzBuzzPlus.isFizzBuzzieChecker(20));
console.log(FizzBuzzPlus.getFizzBuzzSum(20));
console.log(FizzBuzzPlus.getFizzBuzzCount(20));
有些人可能会认识到这是来自Codecademy的FizzBuzz。我正在使用他们的在线JavaScript编辑器玩这个对象。该方法的打印结果始终为0.应该返回0到20之间可被3或5整除的数字,但不能同时归结为3和5.
答案 0 :(得分:2)
在您的代码中,您的return
循环中包含for
语句:
getFizzBuzzCount: function(c) {
var count = 0;
for (var i = 0; i < c; i++) {
if (this.isFizzBuzzie(i)) {
count++;
}
return count; //<-- this return is INSIDE the for loop
}
}
将return
移到for
循环之外:
getFizzBuzzCount: function(c) {
var count = 0;
for (var i = 0; i < c; i++) {
if (this.isFizzBuzzie(i)) {
count++;
}
}
return count;
}
<强>小提琴:强>
http://jsfiddle.net/hVf9n/
答案 1 :(得分:0)
你在for循环中有return语句,isFizzBuzzieChecker
中也存在语法错误,其中)
条件中缺少结束if
getFizzBuzzCount: function(c) {
var count = 0;
for (var i = 0; i < c; i++) {
if (this.isFizzBuzzie(i)) {
count++;
}
}
return count;
}
演示:Fiddle