#javascript #if-statement #switch-statement
#javascript #if-statement #оператор switch
Вопрос:
Я опробовал оба оператора switch и if в своем коде. Switch выглядит лучше, imo. Но у меня это не работает. Оператор if работает. Вы видите проблему? Я чувствую, что они делают то же самое. (я фильтрую список объектов)
let sort = {};
//THE IF STATEMENT
if (query.order == 'name_asc') {
sort = {name : 1 }
}
if (query.order == 'name_desc') {
sort = { name : -1 }
}
if ( query.order == 'lowprice') {
sort = { price : 1 }
}
if ( query.order == 'oldest' ) {
sort = { year : 1 }
}
if ( query.order == 'newest' ) {
sort = { year : -1 }
}
// THE SWITCH STATEMENT
switch (query.order) {
case query.order == 'name_asc':
sort = { name : 1 }
console.log(1)
break;
case query.order == 'name_desc':
sort = { name : -1 }
console.log(2)
break;
case query.order == 'lowprice':
sort = { price : 1 }
console.log(3)
break;
case query.order == 'oldest':
sort = { year : 1 }
console.log(4)
break;
case query.order == 'newest':
sort = { price : -1 }
console.log(5)
break;
default: console.log(6)
break;
}
Комментарии:
1. удалить
query.order ==
вcase
… итакcase 'name_asc'
, и т. Д. — Вот некоторая документация , чтобы узнать, как использовать switch2. Спасибо, попробовал case == ‘name_asc’: сначала. Теперь я знаю, как правильно его использовать 🙂
3.
case == 'name_asc'
нет, это тоже неправильно, все должно быть так, как я сказал, а не то, что вы придумали4. Лол, я знаю. Я только что сказал, что пробовал xD
Ответ №1:
Вы неправильно используете оператор switch query.order == 'name_asc
и т. Д. вычислите логическое значение. Поэтому оператор switch пытается сравнить строку с логическим значением, что приводит к тому, что операторы case никогда не вводятся.
Правильное использование было бы
switch (query.order) {
case 'name_asc':
sort = { name : 1 }
console.log(1)
break;
case 'name_desc':
sort = { name : -1 }
console.log(2)
break;
case 'lowprice':
sort = { price : 1 }
console.log(3)
break;
case 'oldest':
sort = { year : 1 }
console.log(4)
break;
case 'newest':
sort = { year : -1 }
console.log(5)
break;
default: console.log(6)
break;
}
Однако я бы рекомендовал использовать объект для сопоставления значения ввода с результатом. Конечно, это зависит от вас.
const NAME_ASC = 'name_asc';
const NAME_DESC = 'name_desc';
const PRICE_LOW = 'lowprice';
const PRICE_HIGH = 'highprice';
const CREATION_ASC = 'oldest';
const CREATION_DESC = 'newest';
const sortOrderMapping = {
[NAME_ASC]: {name: 1},
[NAME_DESC]: {name: -1},
// fill in all the cases
}
function getSortOrderObject(orderEnum){
// this returns undefined if orderEnum is not a valid value
// maybe you want to return a default value, throw an error, or utilize Option monads
return sortOrderMapping[orderEnum];
}
Ответ №2:
В JavaScript синтаксис switch
оператора:
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
Поэтому вы должны удалить query.order ==
из своего case
, например:
function get_sort(query_order) {
switch (query_order) {
case 'name_asc': return {name: 1};
case 'name_desc': return {name: -1};
case 'lowprice': return {price: 1};
case 'oldest': return {year: 1};
case 'newest': return {year: -1};
}
}
['name_asc', 'name_desc', 'lowprice', 'oldest', 'newest'].forEach(query_order => {
console.log(get_sort(query_order));
});