5

示されているように、2 つの配列を持つ 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});

ランクを注文しますが、名前はそれにとどまりません。

すべての助けに感謝します。ありがとう!

4

4 に答える 4

4

はい、再構成します。代わりにこれを持っていたとしましょう:

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]});
}
于 2012-04-09T23:47:34.057 に答える
2

現実世界のオブジェクト:

 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);
});
于 2012-04-09T23:49:42.383 に答える
1

はい、配列内のi番目のオブジェクトがnames配列内のi番目のオブジェクトに接続されているrank場合は、そのように表現する必要があります。つまり、Personとの2つのプロパティを持つ(またはそれが何であれ)オブジェクトを使用する必要が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;    
});
于 2012-04-09T23:46:57.257 に答える
0

並べ替え操作ごとに、ランク配列の反復ごとにどのインデックスがどこに来るかを記憶する独自の並べ替え関数を作成する必要があります。名前配列のソースインデックスから宛先インデックスに同じように移動します。(編集)私の頭のてっぺんからのこのための1つのアルゴリズムは、バブルソートです。調べてください。

もう1つのオプションは、ある種の「マップ」コレクションの実装を探すことです。

于 2012-04-09T23:45:41.200 に答える