JavaScript中使用Array.map提取质数数组末位值时异常求助
用Array.map()生成质数最后一位数组的正确姿势
为什么你的代码会出问题?
Array.map()的核心逻辑是遍历原数组,把回调函数的返回值收集起来生成新数组,你最后赋值给lastDig的就是这个新数组。- 第一次用
console.log(value % 10)时,你看到的输出是回调里打印的内容,但console.log()本身返回undefined,所以实际lastDig是一个全为undefined的数组,只是你没注意到这点。 - 换成
lastDig.push(value % 10)后,push()方法的返回值是当前数组的长度。你一边往lastDig里push元素,一边又把map返回的「每次push后的长度」重新赋值给lastDig,最后lastDig就变成了[1,2,3,...25]——这是每次push操作返回的数组长度,不是你要的最后一位数字。
正确实现方式
直接利用map()的返回值特性,在回调里返回质数的最后一位即可:
// 假设primes是你的质数数组 const lastDig = primes.map(value => value % 10);
这样lastDig就是由所有质数最后一位组成的新数组,完全不需要额外创建空数组再手动push。
补充:如果想用push怎么办?
如果非要用push来实现,应该用Array.forEach()(专门用来遍历执行操作,不返回新数组),而不是map():
const lastDig = []; primes.forEach(value => { lastDig.push(value % 10); });
内容的提问来源于stack exchange,提问作者J_R
相关产品推荐
相关产品推荐

