首頁  >  文章  >  web前端  >  JavaScript交換兩個變數值的七種解決方案

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

高洛峰
高洛峰原創
2016-12-03 10:46:391794瀏覽

前言

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

var a = 123;
var b = 456;

   

交換變數值方案一

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

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

   

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

交換變數值方案二

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

例如這個

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

   

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

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

   

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

交換變量值方案三

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

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

   

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

不過我們可以這樣

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

   

交換值方案。保存著應該交換後的鍵值對,最後賦值搞定

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

   

交換變數值方案五

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

reee

值方案六

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

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

   

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

交換變數值方案七

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

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

   

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

總結

本文提到了這麼多交換變數值的方法,不知道還有沒有其他辦法,雖然它是一個無關緊要的問題,不過可以練一練我們的腦洞。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn