Все, что вам нужно знать о перестановке переменных в JavaScript
Maksym PohribnyakПерестановка двух переменных обычно требует временной переменной или алгоритма обмена XOR, как показано в примере № 2. Мы рассмотрим два типа условий и 5 типов методов замены двух переменных в JavaScript.
- Примеры #2 and #3 применимы, если переменная является типом number;
- Остальные методы работают со всеми типами, такими как:
string
,number
,object
,array
и.т.д
Давайте разберем 5 различных способов обмена двумя переменными в JavaScript. Вот первый.
# 1 Использование временной переменной
Вышеупомянутый метод может использоваться для замены двух типов переменных любого типа.
В приведенном выше примере мы создали переменную tmp
для хранения значения x
и присвоения y
к x
, а затем tmp
к x
.
Обмен значениями переменных без временной переменной.
# 2 Обмен с использованием оператора Bitwise XOR
Для лучшего понимания обратитесь к этому вики-алгоритму обмена XOR.
Оператор xor в JavaScript преобразует свои операнды в 32-разрядные целые числа (используя внутренний метод ToInt32 - см. Раздел 11.10 стандарта ECMAScript). Он не дает правильных результатов для нецелых числовых значений. Он также преобразует нечисловые значения в 32-разрядные целые числа. Если вы начнете с x = "hi" и y = "there", вы получите x == 0 и y == 0.
# 3 Действительно только для чисел
Приведенный выше пример действителен только для переменных, которые являются типом number. Убедитесь, что они именно такого типа.
Обмен одной строкой
Здесь я покажу вам пару методов, которые могут поменять переменные любого типа в одной строке.
# 4 Использование массива
Используя массив, мы записываем значение x в первым эелементом (с индексом 0), а следующим элементом присваиваем знанчению x - значение переменной y. После, берем первый элемент массива и записываем его значение в переменную y.
# 5 Использование выражения разрушения
Вот мой самый любимый , самый простой и читаемый метод обмена двумя переменными с использованием выражения деструктурирования, посмотрите на пример ниже:
Но будьте осторожны, он поддерживает только в ES6 и выше.