我正在尝试制作一个 javascript,它将总结 0-100 之间的每个数字,其中最后一位包含用户选择的 0-9 之间的数字



正如标题所说,我正在尝试做一个JavaScript,其中用户输入0-9之间的数字。然后,它将汇总所有数字,其中最后一位包含用户的数字,即如果用户选择 7,则汇总 7、17、27、37、47、57、67、77、87 和 97。但是,它只返回 0。请帮忙。

<html>
<head>
</head>
<body>
<input type="text" id="write">
<button id="knapp">Klicka på mig!</button>
<div id="box"></div>

<script>
document.getElementById("knapp").addEventListener("click", funktion);

var summa = 0;
var summa2 = 0;
function funktion(){

let imported = document.getElementById("write").value;
for(let i = 0; i < 100; i++){
summa = i;

if((i+'').indexOf(imported)){
i += summa2;
document.getElementById("box").innerHTML = summa2;
}
}   
}
</script>
</body>
</html>

这通常可以概括为:

const found = [];
let searchFor = '7';
for(let i = 0; i < 100; i++){
if((i+'').endsWith(searchFor)){
found.push(i);
}
}
console.log(found);

我认为endsWithindexOf更容易推理,顺便说一下, 在找不到时返回-1

存储数组中找到的内容也更容易,如果需要,稍后可以取回分隔字符串。

编辑

回到原来的,在函数内部和外部维护变量通常不是一个好主意,也确实没有必要,所以我删除了summasumma2

在循环中,您将这些全局变量之一设置为当前索引,原因我不知道,因此将其删除。

如前所述,indexOf返回在字符串中找到子字符串的位置。例如,当你测试'9'.indexOf('7')时,你会得到-1,这是找不到的,但是当在JavaScript中测试真实性时,将被转换为true。所以除了你要找的东西之外,几乎所有东西都是真的。你可以用!来否定它,但这只会越来越丑陋。

测试后,您将summa2添加到i上,但是summa2永远不会从初始值0更改。

最后,在循环中,您不断将文本框的值设置为 100 倍,以summa2的值,如前所述,始终0

编辑 2

这段代码不对数字求和,它只是获取数字,并假设对它们求和应该很容易。从OP的样本数据与他们使用的词语中尚不清楚他们到底要做什么。

您不需要实际遍历每个数字来确定它是否以特定数字结尾。如果取 0 - 100 的范围,则所有以 7 结尾的数字都将是 7、17、27 等。跳跃是 10。当您开始增加用户提供的数字的长度(例如 27)时,您的跳跃变为 100

function numbersEndsWith(number, start, end) {
const step = Math.pow(10, (number + "").length);
for (let i = number + start; i < end; i += step) {
console.log(i);
}
}
numbersEndsWith(7, 0, 100);
numbersEndsWith(7, 50, 100);

删除summa = i;并将i += summa2;更改为summa2 += i;。 Placedocument.getElementById("box").innerHTML = summa2;for块后。我没有尝试,但应该工作。

我会做完全不同的方式: 如果需要总结 7、17、27、37、47、57、67、77、87 和 97 那是0+10+...+80+90 + 7*10. 第一部分总是450,第二部分是你的数字乘以 10。这是一行函数,你不需要 for() 循环。

最新更新