对对象中的javascript数组排序,维护键

对对象中的javascript数组排序,维护键,javascript,sorting,Javascript,Sorting,我有一个javascript对象,有两个数组,如图所示 var Object = {'name': [Matt, Tom, Mike...], 'rank': [34,1,17...]}; 我试图按排名1,2,3进行排序。。但保留与等级相关的名称 Object.name[0] // tom Object.rank[0] // tom's rank of 1. 我应该重新配置对象以使排序更容易吗 我目前正在使用 Object.rank.sort(function(a,b){return a-

我有一个javascript对象,有两个数组,如图所示

var Object = {'name': [Matt, Tom, Mike...], 'rank': [34,1,17...]};
我试图按排名1,2,3进行排序。。但保留与等级相关的名称

Object.name[0] // tom
Object.rank[0] // tom's rank of 1.
我应该重新配置对象以使排序更容易吗

我目前正在使用

 Object.rank.sort(function(a,b){return a-b});
按顺序排列,但名称不能保留


谢谢你的帮助。谢谢

您必须编写自己的排序函数,以便为每个排序操作记住每次迭代在秩数组中的索引位置。在名称数组中,从源索引到目标索引执行相同的移动。(编辑)我脑海中的一个算法是泡泡运动,查一下


另一个选项是寻找某种类型的“映射”集合实现。

好的,是的,如果
names
数组中的第i个对象连接到
rank
数组中的第i个对象,您应该这样表示它。这意味着,您应该使用一个具有两个属性的
Person
(或其他)对象:
name
rank

// person constructor
function Person(name, rank) {
    this.name = name;
    this.rank = rank;
}

// create the object with the array
var myObject = {
    myArray: new Array()
};

// populate the array
myObject.myArray.push(new Person('Matt', 34));
myObject.myArray.push(new Person('Tom', 1));
myObject.myArray.push(new Person('Mike', 17));

// sort the Person objects according to their ranks
myObject.myArray.sort(function(a, b) {
    return b.rank - a.rank;    
});

是的,重新配置。假设你有这个:

var people = [{name:"Matt", rank:34}, {name:"Tom", rank:1}, {name:"Mike", rank:17}];
然后你可以这样分类:

people.sort(function(a, b) {
  return a.rank - b.rank;
}
编辑

由于您有平行列表,只需将它们压缩在一起:

var people = [];
for (var i = 0; i < Object.name.length; i++) {
  people.push({name:Object.name[i], rank:Object.rank[i]});
}
var-people=[];
for(var i=0;i
真实世界对象:

 o = {name: ['Matt', 'Tom', 'Mike'], rank: [34,1,17]};
var arr =[]; 
o.name.forEach(function(name, i){
      arr.push({name: name, rank: o.rank[i]})
});
arr.sort(function(a,b){return a.rank - b.rank});
arr.sort(function(a,b){return a.name- b.name});
o = {name:[], rank:[]}
arr.forEach(function(item){
   o.name.push(item.name);
   o.rank.push(item.rank);
});
制作一个数组以获得更好的数据结构:

 o = {name: ['Matt', 'Tom', 'Mike'], rank: [34,1,17]};
var arr =[]; 
o.name.forEach(function(name, i){
      arr.push({name: name, rank: o.rank[i]})
});
arr.sort(function(a,b){return a.rank - b.rank});
arr.sort(function(a,b){return a.name- b.name});
o = {name:[], rank:[]}
arr.forEach(function(item){
   o.name.push(item.name);
   o.rank.push(item.rank);
});
按等级排序:

 o = {name: ['Matt', 'Tom', 'Mike'], rank: [34,1,17]};
var arr =[]; 
o.name.forEach(function(name, i){
      arr.push({name: name, rank: o.rank[i]})
});
arr.sort(function(a,b){return a.rank - b.rank});
arr.sort(function(a,b){return a.name- b.name});
o = {name:[], rank:[]}
arr.forEach(function(item){
   o.name.push(item.name);
   o.rank.push(item.rank);
});
按名称排序:

 o = {name: ['Matt', 'Tom', 'Mike'], rank: [34,1,17]};
var arr =[]; 
o.name.forEach(function(name, i){
      arr.push({name: name, rank: o.rank[i]})
});
arr.sort(function(a,b){return a.rank - b.rank});
arr.sort(function(a,b){return a.name- b.name});
o = {name:[], rank:[]}
arr.forEach(function(item){
   o.name.push(item.name);
   o.rank.push(item.rank);
});
恢复到原始数据结构:

 o = {name: ['Matt', 'Tom', 'Mike'], rank: [34,1,17]};
var arr =[]; 
o.name.forEach(function(name, i){
      arr.push({name: name, rank: o.rank[i]})
});
arr.sort(function(a,b){return a.rank - b.rank});
arr.sort(function(a,b){return a.name- b.name});
o = {name:[], rank:[]}
arr.forEach(function(item){
   o.name.push(item.name);
   o.rank.push(item.rank);
});

最好将对象更改为以不同格式保存数据,并且对象的变量名不正确。我的对象未命名为object。。我只是觉得这样会更简单。。。我猜不是……太好了!看起来很结实。我试试看!在这种情况下,不确定创建特殊的Person对象是否比普通对象有任何优势。我想稍后你可能会想在上面执行
instanceof
。@darkporter好吧,这很难从一段代码中分辨出来,不是吗?也许一个特殊的Person对象会为进一步的功能带来便利,也许根本就不是……谢谢!我知道必须有一个更直观的方法来解决这个问题。正如你所说,我的人民反对。[{name:val},{name:val}],但是我正在努力提醒(people.name[0]),而且我的var,虽然是用out-of-the函数和async:false-POST创建的,但不能在代码之外使用。。。有什么想法吗?那实际上是
人[0]。名字
。forEach很不错。这是Mozilla扩展还是跨浏览器?在大多数浏览器中都可以使用,在旧浏览器中也可以使用。谢谢Mohsen!我最喜欢用forEach方法重新配置当前对象