即使数字大于 111,也能打印'0'



我已经尝试了很多次来解决这个问题,但我不能完成预期的结果。下面是一个简单的问题:

  1. 计算给定数组中所有能被11整除的值

  2. 如果遇到大于或等于111的数字,无论11的其他可整除的数字如何,则返回0。

  3. 例如:

  • 输入:[11,12,22,33]

  • 输出:3

  • 输入:[11,12,22,33,136]

  • 输出:0

我能解第一部分,但第二部分没解出来。

这是我的代码。

function div(list) {
let counter = 0
list.forEach((value) => {
if (value % 11 === 0) {
counter++
return counter
}
if(value>=111){
return 0
}
})
return counter
}
div([11, 22, 33, 44 , 116])
// OUTPUT : 4

使用for循环,这样如果发现break条件,您可以返回内部。否则,只在末尾返回,而不在循环内返回。

function div(list) {
let counter = 0;
for (const value of list) {
if (value % 11 === 0) {
counter++
}
if (value >= 111) {
return 0
}
}
return counter
}
console.log(div([11, 22, 33, 44, 116]));

以上答案都很好,添加了一种不同的方法,让内置方法执行循环

function div(total, value) {
if (value % 11 === 0) {
total++;
}
if(value>=111){
total=0
}
return total;
}
console.log([11,12,22,33].reduce(div,0));

使用for...of循环遍历list,当value为>= 111时返回循环内,否则继续计数能被11整除的值

function div(list) {
let count = 0;
for (const value of list) {
if(value >= 111){
return 0;
} else if (value % 11 === 0) {
count++;
}
}
return count;
}
console.log(div([11, 22, 33, 44 , 116]));

其他的答案都很好。这里有一个更简洁的解决方案,它提供了一个返回语句。

function div(list) {
let counter = 0;
let oversized = false;
for (let i = 0; (i < list.length) && !oversized; i++) {
counter += (list[i] % 11) ? 0 : 1;
oversized = (list[i] >= 111);
}
return oversized ? 0 : counter;
}
console.log(div([11, 22, 33, 44 ]));

最新更新