I'm working on a practice project - a Dota related mini game.
http://jsfiddle.net/easwee/MwGsd/
You are making combinations of 3 reagents to summon(invoke) a spell.
I have an array containing all possible spell combinations and another empty array which records keypresses and stores the pressed reagent in that array. You always need 3 reagents to create a spell - the order of reagents does not matter.
So far all works, but I'm encoutering a problem once I start comparing the inputed reagents array to the spell list array:
I'm using the following compare function:
function compareArrays(arr1, arr2) {
return arr1.sort().toString() === arr2.toString()
}
I sort the array and compare in the following function (reagentStack - contains the inputed reagents):
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;
}
}
}
In the example fiddle (here) if you press Q + Q + E + R you create a spell combination (in this case icewall).
It is comparing all ok and follows my script logic (set's compareStack to reagentStack, sorts the compareStack and compareSpell arrays and compares), but I can't understand why does it also sort reagentStack array since I'm not sorting it anywhere in the whole script?
It is not sorted on the first iteration of for loop, but get's sorted on second iteration and won't compare anymore correctly since now compareStack is getting set to a sorted reagentStack instead to the originally inputed.
Console log:
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
On first loop the reagentStack is not sorted on second loop it is already sorted - why?