为何这段JavaScript代码必须新建变量才能正常运行?
问题:为何直接执行
Number(arr.join(""))后返回arr无法得到正确结果? 我在完成Codewars编程挑战时,需要编写一个函数:将输入数字的每一位分别平方后拼接成新数字。例如输入232,应返回494(2²=4,3²=9,2²=4,拼接后为494)。我写出了可行代码,但如果不新建变量,直接执行Number(arr.join(""))后返回arr,结果仍是分散的数组而非完整数字。为什么必须新建变量才能让代码正常工作?
可行代码
function squareDigits(num){ let numStr = String(num) let split = numStr.split(""); let arr = []; for(let i = 0; i <= split.length-1; i++){ let sqr = Math.pow(split[i],2); arr.push(sqr); } let join = Number(arr.join("")); return join } console.log(squareDigits(232)) // 输出494
错误代码
function squareDigits(num){ let numStr = String(num) let split = numStr.split(""); let arr = []; for(let i = 0; i <= split.length-1; i++){ let sqr = Math.pow(split[i],2); arr.push(sqr); } Number(arr.join("")); return arr } console.log(squareDigits(232)) // 输出[4,9,4]
解答
核心问题不是“必须用变量”,而是你没返回转换后的结果:
Number(arr.join(""))这个操作会生成一个新的数字值,但它不会修改原数组arr——原数组还是存着各位平方后的单个数字,不会变成拼接后的完整数字。- 错误代码里,你执行完转换后直接返回了原数组
arr,自然得到的是分散的数组;而可行代码里,你把转换后的结果存在变量join里,返回这个变量,所以能得到正确数字。
其实不用变量也能正常工作,只要直接返回转换后的结果就行:
function squareDigits(num){ let numStr = String(num) let split = numStr.split(""); let arr = []; for(let i = 0; i <= split.length-1; i++){ let sqr = Math.pow(split[i],2); arr.push(sqr); } // 直接返回转换后的结果,无需额外变量 return Number(arr.join("")); } console.log(squareDigits(232)) // 输出494
总结:Number(arr.join(""))是生成新值,原数组不会被改变,你需要返回这个新值,而不是原来的数组。
内容的提问来源于stack exchange,提问作者TheComic2222
相关产品推荐
相关产品推荐

