Этот код должен выбрать одно значение из массива и затем выполняться в соответствии с этим значением. Вместо этого код выбирает несколько элементов из массива, а затем выполняет итерацию else if несколько раз.
Вот первый пример коммутатора с проблемами:
switch (autoshuffle) {
case "random":
autoshuffle = ["true", "false", "ascending", "descending"][
Math.floor(Math.random() * 4)
];
console.log(autoshuffle);
if (autoshuffle == "true") {
shufflexup(file_list);
console.log("sort shuffled");
} else if (autoshuffle == "ascending") {
file_list.sort();
console.log("sort ascending");
} else if (autoshuffle == "descending") {
file_list.sort();
file_list.reverse();
console.log("sort descending");
}
break;
}
Вот некоторые результаты консоли:
Запуск 1
true
false
ascending
sort ascending
Запуск 2
ascending
sort ascending
descending
sort descending
descending
sort descending
В связи с этим возникают множественные нежелательные сортировки, которые влияют на производительность.
Я пытался добавить другое окончание, но это не помогло.
Конечно, я делаю какую-то глупость. Ценим любую информацию.
Почему вы используете if/else внутри оператора switch?
Все значения вашего массива являются строками, но вы сравниваете их с истинными (логическими). Это предназначено?
Здесь нет ничего, что указывало бы на то, что ваш код автоматически запускается для каждой ветки, на самом деле я не думаю, что это возможно, основываясь на том, чем вы поделились. Я подозреваю, что проблема вне этой функции. Кое-что вызывает эту функцию несколько раз.
Спасибо, Эверт. Именно это и происходит. Моя точка зрения была слишком узкой.