javascript - 在javascript中撤消对排序数组的排序

标签 javascript arrays sorting

  1. 我有一个数组。我整理一下。
  2. 我得到第二个数组,已经根据第一个数组排序。

我需要反转第二个数组的排序。

例如,如果第一个数组(未排序)是:[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/

相关文章:

javascript - 存储超过 4096 字节的数组一周

c - 变量地址与数组元素地址冲突

arrays - 遍历数组广度搜索

python - 根据时间对字典列表值进行排序

javascript - JQuery 通过部分类名隐藏列表元素

javascript - 不可见的 reCaptcha : can't make a working AJAX call, 得到无限循环

sql - 如何选择带有连接列的表?

python - 根据不同的数组对随机生成的 Numpy 数组进行排序

javascript - 操作谷歌日历 DOM

javascript - 右对齐在 D3 中创建的 HTML 表格