JavaScript循环中断并继续(JetBrains练习)

JavaScript循环中断并继续(JetBrains练习),javascript,sum,break,continue,Javascript,Sum,Break,Continue,您将获得一个称为数字的数字数组。计算数字之和并从函数返回。如果下一个数字等于0,程序必须停止处理这些数字并返回结果 示例输入1:** 11 12 15 10 0 100 样本输出1: 48 样本输入2: 100 0 100 样本输出2: 100 我不能让它工作,这是我到目前为止所做的 我是否应该创建一个计数器,每次它进入循环时进行求和(以检查它是否为0),然后创建另一个计数器,获取“n”值并将其与数字求和 function sum(numbers) { let add = 0;

您将获得一个称为数字的数字数组。计算数字之和并从函数返回。如果下一个数字等于0,程序必须停止处理这些数字并返回结果

示例输入1:**

11 12 15 10 0 100
样本输出1:

48
样本输入2:

100 0 100
样本输出2:

100
我不能让它工作,这是我到目前为止所做的

我是否应该创建一个计数器,每次它进入循环时进行求和(以检查它是否为0),然后创建另一个计数器,获取“n”值并将其与数字求和

function sum(numbers) {
    let add = 0;

    for (let n in numbers) {
        if (numbers[n] === 0) {
            break;
        }
        if (numbers[n] !== 0) {
            add = numbers[n] + n;
            n++;
        }
        return (numbers[n]);
    }
}
具有计数器或数组的传统for循环。forEach()用于数组。(感谢@T.J.Crowder的链接) 此外,与两个单独的if语句不同,您只需要一个测试0的语句,如果是这种情况,则中断。如果不是,代码只会继续执行--如果需要,不需要额外的代码。最后,返回不应该在循环中。它应该在循环完成后发生

函数和(数){
让加法=0;
//Array.reduce()确实是这里最好的解决方案,
//但不是你的任务想要你用的。
//for/in实际上是用于迭代对象,
//而counting`for`循环用于数组
对于(变量i=0;ilog(总和([100,01000])我可以看到您当前的代码存在多个问题。
首先,您应该以更好的方式命名函数,以描述它的实际功能。for循环没有意义,因为在n个数字中,您得到的是元素而不是索引,因此数字[n]没有意义。循环中的let指令不应该存在。
第二个if块可以是else。add应设置为add+n,n++没有意义。返回应该在循环之外,并且实际返回add


看起来您对一般程序流的外观没有太多经验,因此我建议您再次查看单个指令。如果你知道它们的意思,试着在纸上一步一步地做你的算法,以了解它实际上做了什么和应该做什么。如果您在理解当前程序流时遇到困难,您还可以添加一些console.log(…)。

由于这些解释,我这次解决了另一个问题,类似于上面的问题,以防它对任何人都有帮助:

查找给定数组中第一个出现的数字5并返回其索引。如果找不到号码,请返回-1。

示例输入1:

103854345

样本输出1:

48
三,

样本输入2:

100 0 100
51011112

样本输出2:

100
0

函数find5(数字){
让find=5;
for(设v=0;v
for/in
循环用于迭代对象。传统的
for
循环具有计数器或
数组。forEach()
用于数组。另外,除了两个独立的
if
语句之外,您只需要一个测试
0
的语句,如果是这样的话,它就会中断。如果不是,代码将继续执行--如果不需要,则不需要额外的
。最后,返回的
不应该在循环中。它应该在循环完成后发生。请重新讨论Scott关于
for in
,的观点。请在for循环中使用let而不是var,因为var是一种不好的做法,尤其是在这里,因为在循环外不需要计数器。@r确实
var
不是一种很好的做法
let
当然很好,有助于解决闭包问题,但
var
不是一个红头的子代,也不是完全有效的代码。计数器变量在完整函数的范围内是不需要的。例如,如果我需要重新声明,那么使用var之后很容易出错。这可能会让初学者感到困惑,尤其是。另外请注意,Jetbrains IDE甚至会在每个var中添加警告,ankkara正在遵循他们的一个指南。非常感谢Scott和Andrbrue的回答,特别是您给出的详细解释。我想我的问题是我对数组索引、元素和循环考虑过多。我是编程新手,非常感谢你的帮助。非常感谢:)@ankkara
var
不像
let
const
那样容易被误用。这是一个不以循环变量的范围为中心的示例,因此,它是不相关的。但是,你的观点是不正确的。使用适合您当前需求的适当范围才是关键。这可能意味着
let
var
。这两者都不是天生的“好”或“坏”。虽然本练习确实给了您使用
continue
的机会,但请记住,程序的自然“流”是继续的,因此更好的逻辑应该是引入条件代码来避免自然流(
break
return
)。你会发现你不会以这种方式将自己编码成循环逻辑。好吧,我明白你的意思,继续,那么它可能是“无用的”,因为代码无论如何都会继续。谢谢,我会记住的!