反转Javascript中的对象数组

时间:2018-08-19 12:40:01

标签: javascript arrays object

正如标题所述,我想反转Java语言中由对象组成的数组。

示例:var x = [{"score":1},{"score":2},{"score":3}]

为此,我正在使用.reverse()方法。

现在,假设我编写了这段代码

console.log(x);
x.reverse();
console.log(x);

我希望控制台以原始顺序显示阵列,然后以相反的顺序显示。但是,它实际上以相反的顺序显示了两个数组。

为什么?

3 个答案:

答案 0 :(得分:3)

console.log()考虑到可变对象在打印到屏幕上之前是否已更改。由于 OUTPUT -> CHANGE -> OUTPUT 的过程几乎是准同步的,所以两个输出是相同的。您必须使用x的副本才能获得所需的提示。

尝试一下:

// copy x
y = Object.assign({}, x);
console.log(y);

x.reverse();
console.log(x);  

答案 1 :(得分:1)

最好的方法是:

var y = [...x].reverse();

var x = [{"score":1},{"score":2},{"score":3}]
console.log(x);
var y = [...x].reverse();
console.log(y);

答案 2 :(得分:-1)

根据此处的MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

函数reverse()是破坏性的

这意味着该函数更改了原始数组,如果要像这样存储原始数组,则必须创建另一个变量:

var array1 = ['one', 'two', 'three'];
console.log('array1: ', array1);
// expected output: Array ['one', 'two', 'three']

var reversed = array1.reverse(); 
console.log('reversed: ', reversed);
// expected output: Array ['three', 'two', 'one']

/* Careful: reverse is destructive. It also changes
the original array */ 
console.log('array1: ', array1);
// expected output: Array ['three', 'two', 'one']