例如,如果我有这些数组:
var name = ["Bob","Tom","Larry"];
var age = ["10", "20", "30"];
然后我使用 name.sort()
,“name”数组的顺序变为:
var name = ["Bob","Larry","Tom"];
但是,我怎样才能对“name”数组进行排序并使“age”数组保持相同的顺序呢?像这样:
var name = ["Bob","Larry","Tom"];
var age = ["10", "30", "20"];
最佳答案
您可以对现有数组进行排序,或重新组织数据。
方法一: 要使用现有数组,您可以组合、排序和分离它们: (假设等长数组)
var names = ["Bob","Tom","Larry"];
var ages = ["10", "20", "30"];
//1) combine the arrays:
var list = [];
for (var j = 0; j < names.length; j++)
list.push({'name': names[j], 'age': ages[j]});
//2) sort:
list.sort(function(a, b) {
return ((a.name < b.name) ? -1 : ((a.name == b.name) ? 0 : 1));
//Sort could be modified to, for example, sort on the age
// if the name is the same.
});
//3) separate them back out:
for (var k = 0; k < list.length; k++) {
names[k] = list[k].name;
ages[k] = list[k].age;
}
这具有不依赖字符串解析技术的优点,并且可以用于需要一起排序的任意数量的数组。
方法 2: 或者您可以稍微重新组织数据,只对对象集合进行排序:
var list = [
{name: "Bob", age: 10},
{name: "Tom", age: 20},
{name: "Larry", age: 30}
];
list.sort(function(a, b) {
return ((a.name < b.name) ? -1 : ((a.name == b.name) ? 0 : 1));
});
for (var i = 0; i<list.length; i++) {
alert(list[i].name + ", " + list[i].age);
}
对于比较,-1 表示较低的索引,0 表示相等,1 表示较高的索引。值得注意的是 sort()
实际上改变了底层数组。
另外值得注意的是,方法 2 更有效,因为除了排序之外,您不必遍历整个列表两次。
关于javascript - 以相同的方式对两个数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11499268/