我正在尝试对一个数组进行排序,但是第二个数组与第一个数组保持同步。
示例:
var a1 = ["human", "animal", "plant"];
var a2 = ["person", "beast", "nature"];
a1.sort();
排序后我需要数组看起来像这样:
a1 = ["animal", "human", "plant"];
a2 = ["beast", "person", "nature"];
有没有一种简单的方法可以做到这一点,也许使用自定义排序功能?
答案 0 :(得分:4)
您可以在排序之前压缩数组,并在排序后解压缩它们:
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;
}
...但我认为@ duffymo对你有更好的建议。使用object / hash / associative array / map。
var a = [{key: 'human', value: 'person'},
{key: 'animal', value: 'beast'},
{key: 'plant', value: 'nature'}];
a.sort(function (x, y)
{
return x.key - y.key;
});
答案 1 :(得分:3)
尝试这样的事情(未经测试):
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
}
});
类似的东西,玩回归值以使其完美
答案 2 :(得分:1)
我使用关联数组并对键进行排序。这就是你在这里得到的。我认为关联数组是对这个想法的更好的封装。