1. 程式人生 > >JavaScript不借助第三個變數交換a,b兩個變數值

JavaScript不借助第三個變數交換a,b兩個變數值

交換變數值方案一

最最最簡單的辦法就是使用一個臨時變量了
不過使用臨時變數的方法實在是太low了

var t;
t = a;
a = b;
b = t;

首先把a的值儲存到臨時變數中
然後b賦值給a
最後拿出臨時變數中的a值賦給b
這個辦法是最基本的了

交換變數值方案二

下面的方案都不會有臨時變數
我總結了一下
其實不使用臨時變數的思路都是讓其中一個變數變成一個a和b都有關係的值
這樣可以先改變另一個變數值,
最後改變原修改的變數值
比如這個

a = a + b;
b = a - b;
a = a - b;

讓a先變成a與b的‘和’(也可以換成a和b的差,一樣的)
‘和’減去b巧妙的得到了a的變數值賦予b
再通過‘和’減去a的值得到了b的值賦予a
或者是下面的變式(差的形式)

a = a - b;
b = a + b;
a = b - a;

但是感覺和的形式更容易理解

交換變數值方案三

這種方法對於第一次學習JavaScript的同學來說可能不瞭解
因為我們javascript很少會用到位操作
這是我在以前看演算法競賽書的時候學來的
通過底層位運算來進行交換變數值
也是上面的方案演化來的

a ^= b;
b ^= a;
a ^= b;

瞭解一下吧
C++甚至可以a^=b^=a^=b來完成任務
但我發現JavaScript不可以
不過我們可以這樣

a = (b^=a^=b)^a;

交換變數值方案四

把a先變成了一個物件
這個物件儲存著應該交換後的鍵值對
最後賦值搞定

a = {a:b,b:a};
b = a.b;
a = a.a;

交換變數值方案五

和上面的方法很像,只不過物件換成了陣列

a = [a,b];
b = a[0];
a = a[1];

交換變數值方案六

這個辦法十分的巧妙
不是我想出來的
想出來的人一定是大神,除非他是託夢想出來的
簡單粗暴一行程式碼交換了a和b的變數值

a = [b,b=a][0];

根據運算子優先順序,首先執行b=a
此時的b直接得到了a的變數值
然後一步陣列索引讓a得到了b的值(簡直不能再厲害)

交換變數值方案七

最後我的方案是利用了ES6的解構賦值語法
它允許我們提取陣列和物件的值,對變數進行賦值
(舊版本瀏覽器不能使用ES6語法)

[a,b] = [b,a];

可以看到解構賦值語法讓我們的交換變數值變得超級簡單
這個解構賦值語法要是講的話要講很多不是今天的重點
未來我再總結現在就不講了

總結了這麼多交換變數值的方法
不知道還有沒有其他辦法
雖然它是一個無關緊要的問題
不過可以練一練我們的腦洞(冏rz)
分享給大家