我正在开展一个练习项目 - 与Dota相关的迷你游戏。
http://jsfiddle.net/easwee/MwGsd/
你正在组合3种试剂来召唤(调用)一个咒语。
我有一个包含所有可能的法术组合的数组和另一个记录按键的空数组,并将压制的试剂存储在该数组中。 你总是需要3种试剂来制造一个咒语 - 试剂的顺序无关紧要。
到目前为止所有工作都有效,但是一旦我开始将输入试剂数组与拼写列表数组进行比较,我就会遇到问题:
我正在使用以下比较功能:
function compareArrays(arr1, arr2) {
return arr1.sort().toString() === arr2.toString()
}
我对数组进行排序并在以下函数中进行比较(reagentStack
- 包含输入的试剂):
function updateSpellList(reagentStack){
for( var spell in spellList ) {
var compareStack = reagentStack;
compareSpell = spellList[spell];
console.log(spell);
console.log('compareStack: ' + compareStack + ' / compareSpell: ' + compareSpell + ' / reagentStack: ' + reagentStack); // check this log in fiddle console
console.log('---');
if(compareArrays(compareStack, compareSpell)) {
invokedSpell = spell;
console.log('Invoked spell: ' + invokedSpell);
break;
}
}
}
在示例小提琴(here)中,如果按 Q + Q + E + R 你创造了一个法术组合(在这种情况下是冰墙)。
它正在比较所有ok并遵循我的脚本逻辑(将compareStack
设置为reagentStack
,对compareStack
和compareSpell
数组进行排序并进行比较),但我不能理解为什么它还要对reagentStack
数组进行排序,因为我没有在整个脚本中的任何地方对它进行排序?
它没有在for
循环的第一次迭代中排序,但是在第二次迭代时得到排序,并且不再正确比较,因为现在compareStack
被设置为已排序reagentStack
而不是最初输入的。
控制台日志:
coldsnap
compareStack: quas,quas,exort / compareSpell: quas,quas,quas / reagentStack: quas,quas,exort
---
ghostwalk
compareStack: exort,quas,quas / compareSpell: quas,quas,wex / reagentStack: exort,quas,quas
在第一次循环中,试剂堆没有在第二次循环中排序它已经排序 - 为什么?