JavaScript实现数字每位平方功能的代码疑问及方法解析
嘿,刚学JavaScript的时候碰到这种数字拆分处理的问题确实容易懵,我来一步步给你拆解清楚,先说说你的代码问题,再解释正确代码里每个方法的作用~
先聊聊你的代码问题
你写的代码:
function squareDigits(num){ return Math.pow(num[0],2) && Math.pow(num[1],2); }
有几个关键问题:
- JavaScript里的数字类型不能像数组那样用索引(比如
num[0])直接取每一位,只有字符串或数组支持通过索引访问元素 &&是逻辑与运算符,它的作用是返回第一个假值或者最后一个真值,不是用来拼接结果的,所以这里根本没法得到你想要的拼接后的数字- 只处理了前两位数字,没法适配任意长度的输入(比如输入1234就完全处理不了)
拆解正确代码里的每个方法
正确代码:
function squareDigits(num){ return Number(('' + num).split('').map(function (val) { return val * val; }).join('')); }
我们把它拆成一步步来看:
('' + num):把数字转成字符串
比如输入9119,这个操作会把它转换成字符串"9119"——只有变成字符串,我们才能把每一位数字拆分开来。.split(''):把字符串拆成字符数组
这个方法会把字符串按空字符拆分,把每个字符变成数组的独立元素。"9119"经过split('')后就变成了数组:["9", "1", "1", "9"],这样每一位数字都成了数组里可以单独处理的项。.map(...):遍历数组,给每个元素做平方操作map方法会遍历数组的每一个元素,对每个元素执行传入的函数,然后返回一个新数组。这里的val是数组里的每一项(比如"9"),val * val会自动把字符串类型的数字转换成数字进行计算("9" * "9"等于81),所以处理后的数组变成:[81, 1, 1, 81]。.join(''):把数组元素拼接成字符串join方法会把数组里的所有元素按指定的分隔符(这里是空字符串'')拼接成一个完整的字符串。[81, 1, 1, 81]经过join('')后就变成了"811181"。Number(...):把字符串转回数字
最后把拼接好的字符串转换成数字类型,这样就得到了最终的结果811181。
简单来说,这个流程就是:数字→字符串→字符数组→每个元素平方→拼接成字符串→转回数字,完美实现了任意长度数字的每一位平方后拼接的需求~
内容的提问来源于stack exchange,提问作者kem247

