Javascript, если еще продолжает итерацию, а не возвращает один выбор и выполняет его

avatar
donmacstack
8 августа 2021 в 19:22
47
0
0

Этот код должен выбрать одно значение из массива и затем выполняться в соответствии с этим значением. Вместо этого код выбирает несколько элементов из массива, а затем выполняет итерацию 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  

В связи с этим возникают множественные нежелательные сортировки, которые влияют на производительность.

Я пытался добавить другое окончание, но это не помогло.

Конечно, я делаю какую-то глупость. Ценим любую информацию.

Источник
evolutionxbox
8 августа 2021 в 19:32
0

Почему вы используете if/else внутри оператора switch?

Wiktor Zychla
8 августа 2021 в 19:34
1

Все значения вашего массива являются строками, но вы сравниваете их с истинными (логическими). Это предназначено?

Evert
8 августа 2021 в 23:00
1

Здесь нет ничего, что указывало бы на то, что ваш код автоматически запускается для каждой ветки, на самом деле я не думаю, что это возможно, основываясь на том, чем вы поделились. Я подозреваю, что проблема вне этой функции. Кое-что вызывает эту функцию несколько раз.

donmacstack
10 августа 2021 в 15:21
0

Спасибо, Эверт. Именно это и происходит. Моя точка зрения была слишком узкой.

Ответы (0)