Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对数组进行排序,但保持第二个数组同步_Javascript_Arrays_Sorting_Sync - Fatal编程技术网

JavaScript对数组进行排序,但保持第二个数组同步

JavaScript对数组进行排序,但保持第二个数组同步,javascript,arrays,sorting,sync,Javascript,Arrays,Sorting,Sync,我试图对一个数组进行排序,但第二个数组与第一个数组保持同步 例如: var a1 = ["human", "animal", "plant"]; var a2 = ["person", "beast", "nature"]; a1.sort(); 在排序之后,我需要对数组进行如下处理: a1 = ["animal", "human", "plant"]; a2 = ["beast", "person", "nature"]; 有没有一种简单的方法可以做到这一点,也许可以使用自定义排序功能?

我试图对一个数组进行排序,但第二个数组与第一个数组保持同步

例如:

var a1 = ["human", "animal", "plant"];
var a2 = ["person", "beast", "nature"];

a1.sort();
在排序之后,我需要对数组进行如下处理:

a1 = ["animal", "human", "plant"];
a2 = ["beast", "person", "nature"];

有没有一种简单的方法可以做到这一点,也许可以使用自定义排序功能?

我会使用关联数组对键进行排序。这就是你在这里得到的。我认为关联数组更好地封装了这个想法。

您可以在排序之前压缩数组,然后在排序之后解压缩:

var a = ["human", "animal", "plant"],
    b = ["person", "beast", "nature"],
    zipped = [];

// zip
for (var i=0; i<a.length; i++)
{
    zipped.push({a: a[i], b: b[i]});
}

zipped.sort(function (x, y)
{
    return x.a - y.a;
});

// unzip
var z;
for (i=0; i<zipped.length; i++)
{
    z = zipped[i];
    a[i] = z.a;
    b[i] = z.b;
}
尝试类似的方法(未经测试):

a1.排序(函数(a,b){
如果(a>b){
//互换a2[0]和a2[1]
var tmp=a2[0];
a2[0]=a2[1];
a2[1]=tmp;
返回1
}否则如果(a

诸如此类,利用返回值使其完美

为数据使用两个并行数组是个坏主意。使用对象数组
[{name:'human',type:'person'},{name:'animal',type:'beast'}]
就不必担心同步问题。如果你必须同步结构,你没有遵循DRY原则。让排序函数修改全局数组听起来是错误的。。。但恐怕这是OP要求的最简单的方法。在我看来,这种方法是基于对
数组的实际实现的假设。对通常错误的
代码进行排序:您不能假设当前比较的两个项目的索引是
0
1
。看看他对您的示例所做的修改:。压缩数组非常有效!我从没想过要做那样的事。谢谢你的帮助!简单,但天才!在第一个代码块中,
行返回x.a-y.a应该是
返回x.a>y.a在第二个块中,行
返回x.key-y.key
应该是
返回x.key>y.key
var a = [{key: 'human',  value: 'person'},
         {key: 'animal', value: 'beast'},
         {key: 'plant',  value: 'nature'}];

a.sort(function (x, y)
{
    return x.key - y.key;
});
a1.sort(function(a, b) {
    if (a > b) {

        // swap a2[0] and a2[1]
        var tmp = a2[0];
        a2[0] = a2[1];
        a2[1] = tmp;

        return 1
    } else if (a < b) {
        return -1
    } else {
        return 0
    }
});