【发布时间】:2021-03-17 10:45:55
【问题描述】:
这是我的无输入代码
// Check if three addends equal sum and return the product if so
let result;
function addNumbers(first,second,third,sum) {
if (first + second + third === sum) {
result = first * second * third;
return (first * second * third);
}
};
// find three numbers in list that add up to specific number
function testResult(list,sum) {
let firstAddend;
let secondAddend;
let thirdAddend;
for (let i = 0; i < list.length; i++) {
firstAddend = list.shift();
for (let j = 0; j < list.length; j++) {
secondAddend = list[j];
for (let k = 1; k < list.length; k++) {
thirdAddend = list[k];
addNumbers(firstAddend,secondAddend,thirdAddend,sum);
}
}
}
};
我想要的是testResult() 在返回产品时从addNumbers() 返回结果。我想摆脱addNumbers() 中的let result; 和result = ...。我一直对范围感到困惑,但我想我开始明白了。每个for 循环是否包含前一个循环的范围?如果有人感兴趣,这是来自代码出现的第 1 天。我不确定这里是否需要数据。如果是让我知道,我会相应地编辑。
【问题讨论】:
-
不清楚你在哪里使用
result。另外,您说您希望testResult返回一些东西,但它没有return声明?我怀疑你正在寻找类似const result = addNumbers(firstAddend,secondAddend,thirdAddend,sum);的东西,然后在最里面的循环中做更多的事情并得到结果(例如if (result === undefined) …)。 -
请使用 map、filter 和 reduce 数组方法而不是 for 循环。代码将更具可读性
-
顺便说一句,你可能不应该做
firstAddend = list.shift();,而是firstAddend = list[i]。如果要避免i、j和k选择相同的元素,请使用for (let j=i+1; j<…和for (let k=j+1; k<…。 -
@captain-yossarian 更简洁,是的。更具可读性,不一定,尤其是对于刚刚学习循环的初学者来说。而
map/filter/reduce实际上是错误的工具,你需要slice和find。 -
谢谢@Bergi。我更改了迭代器并摆脱了
l.shift(),这是有道理的。如何使用slice和find来解决这个问题?
标签: javascript for-loop scope return