如何对数组进行排序然后获取索引并使用索引移动所有相应的元素?

时间:2011-06-10 21:26:01

标签: javascript arrays sorting

我有5个具有相同索引的不同数组,例如:

person[0]="john", address[0]= "Druid Valley", city[0]="Atlanta", amount[0]=2000, need[0]=100; 
person[1]="emily", address[1]="50 decatur", city[1]="Chicago", amount[1]=300; need[1]=50;

我需要按需要[]数组的降序重新排序所有数组,然后根据need [i]的新索引重新排列其他数组的顺序。我正在使用javascript。

谢谢,

约翰

3 个答案:

答案 0 :(得分:1)

need数组进行排序并保存排序排列,然后将该排列应用于其他数组。具体取决于您使用的语言。例如,Matlab sort函数可以返回排序数组和排序排列。

答案 1 :(得分:1)

不要排序“需要”。创建一个索引数组,然后根据需要对该数组进行排序。你没有指定语言,所以你得到了JavaScript:

var person = [], need = [];

var person = ["E", "B", "A", "C", "D"];
var need = [111, 444, 555, 333, 222];

var index = [];
var i = person.length;
while (i--) {
  index.push(i);
}
var comparator = function(a, b) {
  var need_a = need[a];
  var need_b = need[b];

  // For robustness - non-numbers get sorted last:
  if (typeof need_a != 'number' || isNaN(need_a)) need_a = -Infinity;
  if (typeof need_b != 'number' || isNaN(need_b)) need_b = -Infinity;

  if (need_a < need_b) return 1;
  if (need_b < need_a) return -1;
  return 0;
}
index.sort(comparator);

// at this point, person[index[0]] is the person with the biggest need.

var sorted_person = [];
var i = index.length;
while (i--) {
  sorted_person[i] = person[index[i]];
}

// at this point, sorted_person[0] is the person with the biggest need.

console.log(sorted_person);

答案 2 :(得分:0)

创建一个复制数组,该数组与need数组中的值相同(称为排序数组)。 然后查看原始需要数组 - 并且每个单元格找到它在排序数组中的位置,并将来自其他数组的匹配值放到它们在排序数组中出现的相同单元格数