Можно ли ещё сократить запись "a = a === x ? y : x"?
Дана переменная a и постоянные x, y
const x = 1;
const y = 2;
let a = x;
Если а равна одной из них, то должна стать равной другой.
Можно ли это записать короче, чем так:
a = a === x ? y : x;
?
Тип данных может быть любым, проверка строгая.
P.S. Не тестовое, просто самому интересно.
Ответы (2 шт):
Автор решения: EzioMercer
→ Ссылка
В данном случае нет, но если такое у вас часто встречается и вы хотите упростить переключение между несколькими значениями, то можете написать такое:
console.log('VALUES 2 ---------------------------');
const x = '1';
const y = 2;
let a = x;
const values = new Map([[x, y], [y, x]]);
a = values.get(a);
console.log(a, typeof a);
a = values.get(a);
console.log(a, typeof a);
a = values.get(a);
console.log(a, typeof a);
console.log('VALUES 4 ---------------------------');
const x1 = '1';
const x2 = 2;
const x3 = {b: 'Three'};
const x4 = ['Four'];
let value = x1;
const valuesMap = new Map([
[x1, x2],
[x2, x3],
[x3, x4],
[x4, x1],
]);
value = valuesMap.get(value);
console.log(value, typeof value);
value = valuesMap.get(value);
console.log(value, typeof value);
value = valuesMap.get(value);
console.log(value, typeof value);
value = valuesMap.get(value);
console.log(value, typeof value);
value = valuesMap.get(value);
console.log(value, typeof value);
- Почему использовал
new Map()вместо обычного объекта? Потому что у обычного объекта в роли ключа не может быть любой тип данных, а уnew Map()может. - Так же этот метод можно спокойно расширять чтобы переключаться между 3-мя, 4-мя и более значениями.
- Почему не просто через
switch caseраз уж используется дополнительный код? Во первых так лаконичнее, во вторыхswitch caseнельзя динамически расширять в дальнейшем, но если, конечно, у вас всегда будут заранее известное кол-во переключений и переключения не будут в дальнейшем меняться (в случае с 2-мя данными такое, конечно не провернёшь, но если будет 3 переключателя, то может понадобиться переключаться в обратном порядке например), то можете использовать иswitch case, но лично я буду ссылаться на лаконичностьnew Map()
Автор решения: DraKoan
→ Ссылка
Всё же ответ: нет.
а = a !== x ? x : y;
а !== x ? a = x : a = y;
a = (a => a !== x ? x : y)(a)
a = new Map([[x, y], [y, x]]).get(a);
а = (а => [x, y].find(v => v !== a))();