在 JavaScript 中撤消对已排序数组的排序

2024-01-12

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

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

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

Now the data_x数组的排序方式与data_r array.

我怎样才能撤消排序data_r array?

下面的代码是不正确的:

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

你这里的前提是有缺陷的。

最后,sort_order 数组包含我们对项目进行排序时执行的操作。

不,事实并非如此;它包含 Javascript 执行的比较的日志Array.sort功能。它针对这些比较结果所采取的行动是其私有的。

如果我想以与第一个数组完全相同的方式对第二个数组进行排序,那么我可以执行以下操作:

这不能保证有效。即使两个数组大小相同,Array.sort每次调用时可能并不总是以相同的顺序比较相同的元素 - 它可能使用随机算法,它基于解释器内部的其他数据执行比较,或者它在多个完全不同的排序算法之间切换在某些情况下。

虽然此代码现在可能适合您,在您当前的 Web 浏览器中,但在其他情况下(可能在未来的浏览器中)可能会以令人惊讶的方式失败。不要在生产代码中使用此技术。

问题是,如何取消 data_r 数组的排序?

在对数组进行排序之前,先复制该数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中撤消对已排序数组的排序 的相关文章

随机推荐