2017-09-07 63 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']