2017-09-07 66 views
0

無法判斷我的瀏覽器控制檯是否被竊聽或發生了什麼,因爲我從來沒有遇到過使用反向函數的問題。str.reverse函數顛倒全局範圍中的每個陣列

當我把下面進入我的鉻控制檯,

var a = ['one', 'two', 'three']; 
var reversed = a.reverse(); 

console.log(a);  // ['one', 'two', 'three'] 
console.log(reversed); // ['three', 'two', 'one'] 

我得到了地方 enter image description here

回答

0

Array#reverse作品,並且不產生新的數組。行

var reversed = a.reverse(); 

反轉a並且還設置reversed引用相同的陣列。

在這個例子中,你可以看到,將項目添加到reversed也影響a,因爲它們引用同一個數組:

var a = ['one', 'two', 'three']; 
 
var reversed = a.reverse(); 
 

 
reversed.push(1000); // add something to reversed 
 

 
console.log(a);  // ['three', 'two', 'one', 1000] 
 
console.log(reversed); // ['three', 'two', 'one', 1000]

要創建一個新的陣列上原來使用Array#slice,然後顛倒陣列:

var a = ['one', 'two', 'three']; 
 
var reversed = a.slice().reverse(); 
 

 
console.log(a);  // ['one', 'two', 'three'] 
 
console.log(reversed); // ['three', 'two', 'one']

+0

一個如何去設置一個變量反轉的字符串,同時保持原來的,所以他們可以比較,並記錄所需的輸出作爲評論? –

+0

@BrodyMacfarlane - 切片然後反轉。我已經添加了一個例子。 –

+0

嘿,非常感謝。拉姆錯誤在我的部分。只接受幾個答案! –

0

反轉函數改變當前數組。在您宣佈reverseda.reverse()後,數組a也會發生變異。因此,你會打印出['three', 'two', 'one']console.log(a)console.log(reversed)

你想要做的是使一個克隆:

var a = ['one', 'two', 'three']; var reversed = a.slice().reverse();

console.log(a); // ['one', 'two', 'three'] console.log(reversed); // ['three', 'two', 'one']