- 我有一个数组。我整理一下。
- 我得到第二个数组,已经根据第一个数组排序。
我需要反转第二个数组的排序。
例如,如果第一个数组(未排序)是:[9, 5, 3, 0, 2]
那么我想对其进行排序,使其变为 [0 , 2, 3, 5, 9]
。
然后我收到基于第一个数组排序的第二个数组,例如 ["home", "car", "train", "pc", "mouse"]
。我需要它变成 ["mouse, "pc", "train", "home", "car"]
。
我无法复制数组。
我有以下代码:
//data_r is an array with values
var i = 0;
var sort_order = new Array();
data_r.sort(function (a,b) {
var res = a[0] - b[0];
sort_order[i] = res;
i++;
return res;
});
最后,sort_order
数组将包含我们对项目进行排序时执行的操作。如果我想以与第一个数组完全相同的方式对第二个数组进行排序,那么我可以执行以下操作:
//data_x is an array with values
var i = 0;
data_x.sort(function (a,b) {
i++;
return sort_order[i-1];
});
现在 data_x
数组的排序方式与 data_r
数组的排序方式完全相同。
如何取消对 data_r
数组的排序?
以下代码不正确:
var unsort = new Array();
for(var i = 0; i < data_r.length; i++)
unsort[i] = sort_order[i]*(-1);//-1 so we perfom the oposite action
最佳答案
你的前提是有缺陷的。
In the end, the sort_order array contains the actions performed when we sorted items.
不,它没有;它包含由 Javascript Array.sort
函数执行的比较日志。它为响应这些比较结果而采取的行动是私有(private)的。
If I want to sort a second array exactly the same way as the first then I can do the following:
这不能保证有效。即使两个数组的大小相同,Array.sort
也可能不会在每次调用时总是以相同的顺序比较相同的元素 - 它可能使用随机算法,它基于解释器内部的其他数据,或者在某些情况下它在多个完全不同的排序算法之间切换。
虽然这段代码现在可能对您有用,但在您当前的网络浏览器中,它可能会在其他情况下(可能在未来的浏览器中)以令人惊讶的方式失败。不要在生产代码中使用此技术。
The question is, how can i unsort the data_r array?
在排序之前复制数组。
关于javascript - 在javascript中撤消对排序数组的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17598374/