猜猜我这个算法是干嘛的

2022-03-23 22:29:52 +08:00
 Chism
function addAndAdd(number) {
  number = Number(number)
  if (isNaN(number)) {
    return '0'
  } else if (0===number) {
    return '5'
  }
  const string = number + ''
  if (1===string.length) {
    return string
  }
  let sum = 0
  for (let i=0; i<string.length; i++) {
    sum += Number(string[i])
  }
  return addAndAdd(sum)
}
2772 次点击
所在节点    程序员
13 条回复
wuvvu
2022-03-24 00:22:02 +08:00
逐位相加
LxExExl
2022-03-24 06:39:16 +08:00
逐位相加直到只剩 1 位数。
newbieRenew
2022-03-24 07:12:37 +08:00
还是第一次见这么写恒等号的,虽然位置不影响结果
nutting
2022-03-24 08:58:29 +08:00
@newbieRenew java 程序员都那么写
RickyC
2022-03-24 09:18:33 +08:00
好害怕递归, 感觉不符合人类思维模式.
MoYi123
2022-03-24 09:30:12 +08:00
@newbieRenew 这个写法专门的名称, 叫"尤达表达式"
xinJang
2022-03-24 11:37:58 +08:00
@MoYi123 写 java 的经常用。用来避免空指针
wenzhonghu
2022-03-24 12:49:02 +08:00
@xinJang 这个好像是用来避免错把 (x==1)写成(x=1)的。(因为字面量不可能被赋值)
EscYezi
2022-03-24 13:02:37 +08:00
@xinJang #7 java 不是用 equals 么,基本类型用==比较还是空指针
Chism
2022-03-24 13:16:24 +08:00
@EscYezi
js 弱语言,===表示类型也要一样,否则 0=="0"也是 true
Chism
2022-03-24 13:17:35 +08:00
@wenzhonghu
对,我习惯把变量放后面,以前上大学刚学 c 语言吃过 if(a=0)这种亏,后来就养成这种习惯
xinJang
2022-03-24 17:19:42 +08:00
@EscYezi 0 equals var 惯用写法,这跟尤达表达式倒装不是一样吗
xinJang
2022-03-24 17:20:08 +08:00
@wenzhonghu equals 写法也符合尤达的定义吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842476

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX