javascript - 比较运算符没有返回正确的值

标签 javascript

给定两个字符串,每个字符串代表善恶双方的成员,找出哪一方会获胜。

好:霍比特人 - 1,人类 - 2, Sprite - 3,矮人 - 3,老鹰 - 4,巫师 - 10

邪恶:兽人 - 1,人类 - 2,座狼 - 2,哥布林 - 2,乌鲁克海族 - 3,巨魔 - 5,法师 - 10

我编写了一个函数来计算哪一方会获胜。它大部分时间都有效,但有时会表现得很奇怪。

function goodVsEvil(good, evil){
 //string to array good and array evil in integers
  var aG = good.split(" ").map(x=>parseInt(x))
  var aE = evil.split(" ").map(x=>parseInt(x))

 //calculate final score good and final score evil
  var fSG = aG[0]*1 + aG[1]*2 + aG[2]*3 + aG[3]*3 + aG[4]*4 + aG[5]*10
  var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[5]*10

  console.log('equals: '+ (fSG == fSE))
  console.log('good > evil: '+(fSG > fSE))
  console.log('good < evil: '+(fSG < fSE))
}

一些错误案例:

var result = goodVsEvil('1 0 0 0 1 0', '0 0 0 0 0 1 0')
//output
good: 5
evil: 5
equals: false
good > evil: false
good < evil: true

另一个:

good: 10
evil: 10
equals: false
good > evil: false
good < evil: true

另一个:

good: 2
evil: 2
equals: false
good > evil: true
good < evil: false

在这里,它工作正常

var result = goodVsEvil('1 1 0 0 0 0', '0 0 0 0 1 0 0')
good: 3
evil: 3
equals: true
good > evil: false
good < evil: false

这个谜题来自codewars:https://www.codewars.com/kata/good-vs-evil/train/javascript

最佳答案

如果您记录 fSGfSE,您会注意到 fSE 实际上等于 15例如,不是 5

那是因为您在计算值的行中有错字。 您使用了两次 aE[5] 而不是 aE[6]:

var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[5]*10

应该是

var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[6]*10

作为旁注,请尝试为您的变量找到更全面的名称。乱七八糟的三个字母组合让人很难理解这些值背后的意图! :-)

关于javascript - 比较运算符没有返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40918794/

相关文章:

javascript - 存储在 Session Javascript 中后获取 DOM 事件

javascript - 在 web2py 中将 python 数据传递给 javascript

javascript - 将全局设置添加到数据表 yajrabox laravel

javascript - 如何将表格放在像坐标系一样的图像轮播上?

javascript - 在 for 循环中使用 x.length 时出现问题

Javascript -= 命令乘以每个循环

javascript - 如何使用 THREE.OBJExporter

javascript - 正则表达式在多个尾随 ]]]] 的情况下无法正常工作

javascript - 获取与 PFObject 云代码的关系

javascript - 离线网站如何保存数据?