亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這個JS解構賦值方法適用于反向單鏈表?

為什么這個JS解構賦值方法適用于反向單鏈表?

大話西游666 2019-04-16 13:15:56
我正在做一個leetcode問題反向單鏈表。我嘗試了下面的代碼,看看我是否錯過了第1位的代碼,結果會出錯。我理解這是因為它失去了對它的引用current.next。(感謝這個stackoverflow帖子。)function ListNode(val) {     this.val = val;     this.next = null;}/**  * @param {ListNode} head  * @return {ListNode}  */var reverseList = function(head) {     let current = head;     let prev = null;     while (current) {         current.next = prev;         prev = current;         current = current.next;         //The right one         // let save = current.next; //1         // current.next = prev;         // prev = current;         // current = save;     }     return prev};問題是,我發現下面顯示的另一個代碼也可以通過使用數組解構賦值(名稱可能正確嗎?),但我無法理解為什么這個工作沒有使用另一個變量來保存引用current.next。var reverseList = function(head) {     let current = head;     let prev = null;     while (current) {         [current.next, prev, current] = [prev, current, current.next];//2     }     return prev};那么第2位的代碼如何實際工作而不使用另一個變量來保存對current.next?的引用?
查看完整描述

2 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

[current.next, prev, current] = [prev, current, current.next]; 是一個數組解構語法,它可以在不顯式保持tempvariable的情況下工作,因為引用保存在數組中


你可以把上面的代碼想象成


const arr = [];

arr[0] = prev;

arr[1] = current;

arr[2] = current.next;


current.next = arr[0];

prev = arr[1];

current = arr[2]

其中原始元素的引用保存在數組中而不是單個變量中


查看完整回答
反對 回復 2019-05-17
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊


使用解構賦值來交換變量不需要臨時變量。


var a = 1;

var b = 3;


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

console.log(a); // 3

console.log(b); // 1

請參閱在MDN上使用Destructuring交換variablesSection

請參閱briosheje關于語言規范詳細信息的答案中鏈接的ECMAScript文檔。


查看完整回答
反對 回復 2019-05-17
  • 2 回答
  • 0 關注
  • 554 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號