有人能给我解释一下这一行javascript代码吗?谢谢

有人能给我解释一下这一行javascript代码吗?谢谢,javascript,Javascript,这是一个简单的函数,用于将素数相加到num。 我是javascript新手,下面这句话让我很困惑 function sumPrimes(num) { let nums = Array.from({ length: num + 1 }) .map((_, i) => i) .slice(2); for (let n in nums) { nums = nums.filter(val => val == nums[n] || val % nums[n] !

这是一个简单的函数,用于将素数相加到num。 我是javascript新手,下面这句话让我很困惑

function sumPrimes(num) {
  let nums = Array.from({ length: num + 1 })
    .map((_, i) => i)
    .slice(2);
  for (let n in nums) {
    nums = nums.filter(val => val == nums[n] || val % nums[n] != 0);
  }
  return nums.reduce((prevSum, cur) => prevSum + cur);
}
我知道过滤函数的作用。但是我被括号里的陈述弄糊涂了。 有人能解释一下吗?非常感谢。

nums=nums.filterval=>val==nums[n]| | val%nums[n]!=0 Nums是一个数组 一个名为Filter的高阶函数正在使用中,您可以在mdn上阅读更多关于Filter的内容 如果迭代中的当前值Val等于nums[n],或者它没有完全被nums[n]除,那么它将返回,否则不会返回。 nums=nums.filterval=>val==nums[n]| | val%nums[n]!=0 Nums是一个数组 一个名为Filter的高阶函数正在使用中,您可以在mdn上阅读更多关于Filter的内容 如果迭代中的当前值Val等于nums[n],或者它没有完全被nums[n]除,那么它将返回,否则不会返回。 nums=nums.filterval=>val==nums[n]| | val%nums[n]!=0

让我们从头开始。 该行表示nums=nums该值

可以看出,这一行不是第一个使用nums的行,因为这一行不是以var、const、let开头的

这就是为什么在定义NUM时可以使用NUM。您正在nums的新值中使用nums的上一个值

过滤器创建一个数组,该数组中填充通过作为函数提供的测试的所有数组元素

您可以使用下面的链接全面阅读有关.filter的内容

如果迭代中的当前值val=>…,val等于nums[n]或表示为| |的值未完全除以nums[n],因此它不等于0,这表示为val%nums[n]!=否则将返回0

我希望这能解决您的问题,并帮助您更好地理解这行代码

nums=nums.filterval=>val==nums[n]| | val%nums[n]!=0

nums = nums.filter(val => val == nums[n] || val % nums[n] != 0)
让我们从头开始。 该行表示nums=nums该值

可以看出,这一行不是第一个使用nums的行,因为这一行不是以var、const、let开头的

这就是为什么在定义NUM时可以使用NUM。您正在nums的新值中使用nums的上一个值

过滤器创建一个数组,该数组中填充通过作为函数提供的测试的所有数组元素

您可以使用下面的链接全面阅读有关.filter的内容

如果迭代中的当前值val=>…,val等于nums[n]或表示为| |的值未完全除以nums[n],因此它不等于0,这表示为val%nums[n]!=否则将返回0

我希望这能解决您的问题,并帮助您更好地理解这行代码

nums = nums.filter(val => val == nums[n] || val % nums[n] != 0)
一,。更新'nums'的值

当filter函数的回调返回true时,将nums的值重新分配给一个新数组,该数组将包含nums数组初始值中的项

nums=nums.filterval=>回调

二,。回调

上述行相当于

val => val == nums[n] || val % nums[n] != 0
如果这条线形成在一个环的内部

//首先考虑'nums`=[2,4,5,7,8] 设nums=[2,4,5,7,8]; 阿甘{ nums=nums.filterval=>{ console.log`for n=${n}==>。使用val=${val}`调用筛选器; log`So val==nums[n]return${val==nums[n]}`; return val==nums[n]| | val%nums[n]!=0; }; console.log`====================================================`; } console.lognums; 一,。更新'nums'的值

当filter函数的回调返回true时,将nums的值重新分配给一个新数组,该数组将包含nums数组初始值中的项

nums=nums.filterval=>回调

二,。回调

上述行相当于

val => val == nums[n] || val % nums[n] != 0
如果这条线形成在一个环的内部

//首先考虑'nums`=[2,4,5,7,8] 设nums=[2,4,5,7,8]; 阿甘{ nums=nums.filterval=>{ console.log`for n=${n}==>。使用val=${val}`调用筛选器; log`So val==nums[n]return${val==nums[n]}`; return val==nums[n]| | val%nums[n]!=0; }; console.log`====================================================`; }
console.lognums 我认为您需要理解的关键是,所讨论的行必须在前面的for语句的上下文中考虑

function (val) {
    return val == nums[n] || val % nums[n] !=0;
}
乍一看,val==nums[n]似乎总是正确的。让我们看看为什么不是这样

每次filter方法的函数运行时,都有许多事情需要评估:

nums的内容

b n的值

c nums的值[n]

d val的值

e val==nums[n]的值

f值%nums[n]!=0

对于.filter函数中的每个调用,都需要对这些内容进行评估

让我们看看在t 他首先调用filter函数。在第一次通话中:

a nums的内容是{2,3,4,5,6,7,8,9,10}

b n的值是0

c nums[n]的值为nums[0],即2

d val的值为2

e val==nums[n}]的值变为2==2,这是真的

f val%num[n]的值=0变为假

因此,第一个元素将保留在nums中,因为val==nums[n}]为TRUE

接下来,filter将评估上面的val=3,依此类推

一旦过滤器在n=0时通过,它将继续n=1


请记住,nums在每次运行.filter时都会被修改。

我认为您需要了解的关键是,必须在前面的for语句的上下文中考虑这一行

function (val) {
    return val == nums[n] || val % nums[n] !=0;
}
乍一看,val==nums[n]似乎总是正确的。让我们看看为什么不是这样

每次filter方法的函数运行时,都有许多事情需要评估:

nums的内容

b n的值

c nums的值[n]

d val的值

e val==nums[n]的值

f值%nums[n]!=0

对于.filter函数中的每个调用,都需要对这些内容进行评估

让我们看看在filter函数的第一次调用中它是什么样子的。在第一次通话中:

a nums的内容是{2,3,4,5,6,7,8,9,10}

b n的值是0

c nums[n]的值为nums[0],即2

d val的值为2

e val==nums[n}]的值变为2==2,这是真的

f val%num[n]的值=0变为假

因此,第一个元素将保留在nums中,因为val==nums[n}]为TRUE

接下来,filter将评估上面的val=3,依此类推

一旦过滤器在n=0时通过,它将继续n=1


请记住,nums在每次运行.filter时都会被修改。

这是否回答了您的问题?哪一部分不清楚?换句话说:过滤num,只留下那些等于nums[n]或其余数除以nums[n]不为零的数值。这只是实现了这一点。这是否回答了您的问题?哪一部分不清楚?换句话说:过滤nums,只留下那些等于nums[n]或其余数除以nums[n]不为零的数值。这就是实现此功能的方法。非常感谢您的回答。我仍然感到困惑。val==nums[n]不是总是真的吗?不,当执行过滤器时,它是为数组中的每个元素执行的循环之王。因此,在循环中,当n=0时,将分别调用对.filter的回调。val等于2,4,5,7,8。当n=0的过滤器回调通过4、5、7、8时,val==nums[n]将为false。因为它将检查2==4、2==5、2==7和2==8,这将始终为false。这就是为什么n=0 nums数组只包含2个这样的[2]重新运行上面的代码段,您将看到调用了多少个筛选器以及调用它的不同值可以将val==nums[n]翻译成人类语言吗?作者希望过滤掉哪些值?谢谢,非常感谢你的回答。我仍然感到困惑。val==nums[n]不是总是真的吗?不,当执行过滤器时,它是为数组中的每个元素执行的循环之王。因此,在循环中,当n=0时,将分别调用对.filter的回调。val等于2,4,5,7,8。当n=0的过滤器回调通过4、5、7、8时,val==nums[n]将为false。因为它将检查2==4、2==5、2==7和2==8,这将始终为false。这就是为什么n=0 nums数组只包含2个这样的[2]重新运行上面的代码段,您将看到调用了多少个筛选器以及调用它的不同值可以将val==nums[n]翻译成人类语言吗?作者希望过滤掉哪些值?非常感谢。