1

並べ替える必要のあるオブジェクトでいっぱいの配列がありますが、これを機能させることができないようです。通常は、単純なsort()メソッドを実行します。これは、単一の列での並べ替えに適していますが、この場合は、1つの列で並べ替えてから、2番目の列で並べ替える必要があります。

これを理解しやすくするために、次のようなオブジェクトの配列があるとします。

{ Name: 'Alfred', Total: 4, Project: 'Foobar' }

この例では、これらのオブジェクトの配列を最初に名前で、次に合計で並べ替えるにはどうすればよいですか?私はこのようなことをすることを考えました:

myArray = myArray.sort(function(a,b){return (a.Name + a.Total) > (b.Name + b.Total)});

しかし、これに取り組むための最良の方法はわかりません。いくつかの提案をいただければ幸いです。

4

2 に答える 2

1
myArray.sort(function(a,b){
  if(a.Name>b.Name){return 1;}
  else if(a.Name<b.Name){return -1;}
  else{
    if(a.Total>b.Total) return 1;
    else if(a.Total<b.Total) return -1;
    else return 0;
  }
});

縮小版:

myArray.sort(function(a,b){return a.Name>b.Name?1:a.Name<b.Name?-1:a.Total>b.Total?1:a.Total<b.Total?-1:0});
于 2012-10-15T09:17:01.177 に答える
0
myArray = myArray.sort(function(a, b) {
  var ret = a.Name.localeCompare(b.Name);
  if (ret == 0) {
     if (a.Total > b.Total) {
         return 1;
     } else if (a.Total < b.Total) {
         return -1;
     }
  }
  return ret; 
});
于 2012-10-15T09:16:23.620 に答える