javascript - 有没有办法从两个不同的数组中删除相同的值?

标签 javascript arrays

我是一名初级程序员,最近发现了 Euler 项目的问题。我有点迷上了第一个问题,因为它对我来说是合适的难度。

我想做的是在 1000 以下的数字范围内计算 3 和 5 的倍数之和。

所以,我已经想出了如何创建两个单独的数组,每个数组都是 3 和 5 的倍数。

for (var i = 0; i < 1000; i++) {
    eulerList.push(i);               

    if (i%3 == 0 && i != 0) {
        multiThree.push(i);
    }

    if (i%5 == 0 && i != 0) {
        multiFive.push(i);
    }  

    if (i == 999) {
        var eulerSum = multiThree.concat(multiFive);   
        print("The total sum is " + eulerSum.reduce(getSum));    
    }

现在,当我尝试计算倍数之和时,它给了我错误的结果,经过一段时间的思考我意识到这是因为列表中的一些数字加倍了。

假设我在 arrayA 和 arrayB 中有一个整数值 15,但我只希望它保留在 arrayA 中,因此我最终可以计算所有倍数的总和。我将如何处理?我一直坚持这一点,在这里阅读并谷歌搜索了几个小时,但我无法全神贯注。 帮助将不胜感激。提前致谢!

最佳答案

你不需要创建单独的数组来存储它们并像那样做。只需创建一个变量 sum 并将数字添加到它们。以下代码段给出了欧拉项目的正确结果。

let sum = 0;
for(let i = 0;i<1000;i++){
  if(i % 3 === 0 || i % 5 === 0) sum += i 
}
console.log(sum)

您可以使用 Arithmetic series 来做到这一点公式

console.log(333/2*(3 + 999) + 199/2*(5 + 995) - 66/2*(15+990));

如果你还想用两个不同的数组来求解。然后创建一个 Set(),它将仅保留两个数组中的唯一值。无需检查 0 它不会影响总和

let multiThree = [];
let multiFive = [];

for (var i = 0; i < 1000; i++) {              
    if (i%3 == 0) {
        multiThree.push(i);
    }
    if (i%5 == 0) {
        multiFive.push(i);
    }  

    if (i == 999) {
        var eulerSum = [...new Set(multiThree.concat(multiFive))];   
        console.log(eulerSum.reduce((ac,a) => ac+a,0))
           
    }
}

关于javascript - 有没有办法从两个不同的数组中删除相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55508498/

相关文章:

javascript - 如何从 Node 包库内部需要根项目目录中的内容?

javascript - 如何确保 javascript/jquery 总是在返回 true(打开链接)之前完成点击功能?

c++ - 如何将二进制输入存储在 C++ 数组中

java - 由于在java上无法正常工作

javascript - 如何从 JavaScript 调用 iMacro?

javascript - Raphael js拖放的解释?

javascript - Ember-data:如果不存在则创建一条记录?

arrays - 什么是 Array In Batch Script 及其工作原理?

Java : CSV reading with ArrayList of List of Integer

PHP-MySql : How to store and retrieve checkbox value with other option