JavaScript交換兩個變量值的七種解決方案

最近在寫位操做的時候忽然想到了這個問題,忽然想總結一下,交換變量值的問題可能使咱們學習編程語言接觸到的比較早的邏輯問題,小夥伴或多或少會兩種解決的方法,本文提供了七種解決的方法,下面跟着小編來一塊兒看看吧。
 
 

前言算法

這篇文章總結了七種辦法來交換a和b的變量值chrome

?
1
2
var a = 123;
var b = 456;

交換變量值方案一編程

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

?
1
2
3
4
var t;
t = a;
a = b;
b = t;

首先把a的值存儲到臨時變量中,而後b賦值給a,最後拿出臨時變量中的a值賦給b,這個辦法是最基本的了瀏覽器

交換變量值方案二編程語言

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

好比這個測試

?
1
2
3
a += b;
b = a - b;
a -= b;

讓a先變成a與b的‘和'(也能夠換成a和b的差,同樣的) ,‘和'減去b巧妙的獲得了a的變量值賦予b ,再經過‘和'減去a的值獲得了b的值賦予a,或者是下面的變式(差的形式)spa

?
1
2
3
a -= b;
b = a + b;
a = b - a;

可是感受和的形式更容易理解.net

交換變量值方案三

這種方法對於第一次學習JavaScript的同窗來講可能不瞭解,由於咱們JavaScript不多會用到位操做,這是我在之前看算法競賽書的時候學來的,經過底層位運算來進行交換變量值,也是上面的方案演化來的

?
1
2
3
a ^= b;
b ^= a;
a ^= b;

瞭解一下吧,C++甚至能夠a^=b^=a^=b來完成任務,但我發現JavaScript不能夠 

不過咱們能夠這樣

?
1
a = (b^=a^=b)^a;

交換變量值方案四

把a先變成了一個對象,這個對象保存着應該交換後的鍵值對,最後賦值搞定

?
1
2
3
a = {a:b,b:a};
b = a.b;
a = a.a;

交換變量值方案五

和上面的方法很像,只不過對象換成了數組

?
1
2
3
a = [a,b];
b = a[0];
a = a[1];

交換變量值方案六

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

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

根據運算符優先級,首先執行b=a,此時的b直接獲得了a的變量值,而後一步數組索引讓a獲得了b的值(簡直不能再厲害)

交換變量值方案七

最後個人方案是利用了ES6的解構賦值語法,它容許咱們提取數組和對象的值,對變量進行賦值,不過我如今測試用的chrome瀏覽器已經實現了

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

能夠看到解構賦值語法讓咱們的交換變量值變得超級簡單,這個解構賦值語法要是講的話要講不少不是今天的重點,之後會在再總結如今就不講了

總結

本文提到了這麼多交換變量值的方法,不知道還有沒有其餘辦法,雖然它是一個可有可無的問題,不過能夠練一練咱們的腦洞。但願本文的內容對你們的學習或者工做能帶來必定的幫助,若是有疑問你們能夠留言交流。

相關文章
相關標籤/搜索