Hi, I’ve been working on this beat mix project and I wanted some help reviewing my code. First, I’ll show what I originally typed and then what I simplified it to.
Original:
const toggleDrum = (arrayName, indexNumber) => {
if (indexNumber >= 0 && indexNumber < 16) {
if (arrayName === 'kicks') {
if (kicks[indexNumber] === true) {
kicks[indexNumber] = false
} else {
kicks[indexNumber] = true;
}
} else if (arrayName === 'snares') {
if (snares[indexNumber] === true) {
snares[indexNumber] = false;
} else {
snares[indexNumber] = true;
}
} else if (arrayName === 'hiHats') {
if (hiHats[indexNumber] === true) {
hiHats[indexNumber] = fasle;
} else {
hiHats[indexNumber] = true;
}
} else if (arrayName === 'rideCymbals') {
if (rideCymbals[indexNumber] === true) {
rideCymbals[indexNumber] = false;
} else {
rideCymbals[indexNumber] = true;
}
}
}
};
Simplified:
const toggleDrum = (arrayName, indexNumber) => {
if (arrayName === 'kicks' || arrayName === 'snares' || arrayName === 'hiHats' || arrayName === 'rideCymbals') {
if (eval(arrayName)[indexNumber] === false) {
return eval(arrayName)[indexNumber] = true;
} else if (eval(arrayName)[indexNumber] === true) {
return eval(arrayName)[indexNumber] = false;
}
}
};
I’m much happier with the simplified version, but is there any way to shorten the first if statement so I don’t have to have so many ‘or’ statements? And don’t have to keep typing the string name of the variables?
I’ve also read that using ‘eval’ is a bad idea, any thoughts on alternatives?
Link to problem here