0

オブジェクトの配列を持っている場合配列1:[Object 1, Object 2, Object 3]各オブジェクトは次のようになります。

object 1 has properties : creation date, name, class, size where name = Bear
object 2 has properties : creation date, name, class, size where name = Dog
object 3 has properties : creation date, name, class, size where name = Guerilla

そして、これらのオブジェクトをそれぞれの名前に基づいてアルファベット順に並べ替えたいので、配列2は次のようになります。[Object 1 (Bear), Object 2 (Dog), Object 3 (Guerilla)]

Javascriptでこの問題にどのようにアプローチしますか?これを行うための便利な方法はありますか?私はJSに比較的慣れていません。前もって感謝します!

4

5 に答える 5

1

カスタム比較ツールでsortメソッドを使用します。

Array1.sort(function(x, y){
  var n1 = x.name;
  var n2 = y.name;
  return n1 == n2 ? 0
    : n1 < n2 ? -1
    : 1;
});
于 2012-10-06T20:57:50.780 に答える
1
arr.sort(function (a, b) {
  return a.localeCompare(b);
});

sortこれはインプレースソートであるため、元の配列がソートされることに注意してください。

于 2012-10-06T21:01:40.057 に答える
1

javascriptのsortメソッドは、任意の属性でオブジェクトをソートするために必要なすべての柔軟性を提供する匿名の比較関数を受け入れます。

一般的なパターンは次のとおりです。

arr.sort(function(a,b){...});

sortメソッドに提供される「anonymous」関数は、比較する2つのオブジェクトを受け入れ、次のように、どちらの要素を上位にソートするかを示す値を返す必要があります。

aをbより上にソートする必要がある場合、aをbより下にソートする必要がある場合は、1を返し、a がbと同等である場合は
-1を返し(ソートの目的で)、0を返します。

次に例を示します(省略記号は他の属性を示します)。

var beasties = [
  {name:'Bear', created_at: ... },
  {name:'Dog', ... },
  {name:'Gorilla', ... }
];

beasties.sort(function(a,b){return a.name > b.name});

ここでは、jsがname属性によって返される文字列を比較する機能に依存しています。

私はそれがあなたのためにトリックをするべきだと思います。

于 2012-10-06T21:10:14.517 に答える
0

カスタム比較関数をArray.sortに渡すことができます。これは、並べ替えアルゴリズムによって使用され、2つの配列要素のどちらが大きいかを決定します。アルゴリズムが2つのオブジェクトを比較するとき、それらを比較関数に渡します。関数が1を返すと、最初の関数が大きいと見なされます。-1を返すと、2番目の値が大きいと見なされます。0を返す場合、それらは等しいと見なされます。

 function compare_function(obj1, obj2){
      if (obj1.name == obj2.name) return 0;
      if (obj1.name < obj2.name) return -1 else return 1;

  }
  my_array.sort(compare_function) 
于 2012-10-06T20:58:48.373 に答える
0

配列のsortメソッドを使用して、関数を渡すことができます。

Array1.sort(function(left,right) {
    if (left.name < right.name) return -1;
    if (left.name > right.name) return 1;
    return 0;
});
于 2012-10-06T21:00:24.493 に答える