web-dev-qa-db-ja.com

D3のプロパティ値に基づくオブジェクトの並べ替え

D3で使用するオブジェクトの配列があります。

var cities = [
  { city: "London", country: "United Kingdom", index: 280 },
  { city: "Geneva", country: "Switzerland", index: 259 },
  { city: "New York City", country: "United States", index: 237 },
  { city: "Singapore", country: "Singapore", index: 228 },
  { city: "Paris", country: "France", index: 219 },
  { city: "San Francisco", country: "United States", index: 218 },
  { city: "Copenhagen", country: "Denmark", index: 217 },
  { city: "Sydney", country: "Australia", index: 215 },
  { city: "Hong Kong", country: "Hong Kong", index: 214 },
  { city: "Brisbane", country: "Australia", index: 208 }
}

それらのcity.indexプロパティに基づいて、オブジェクトを昇順で並べたいと思います。 D3.jsでそのように表示できるようにします。 D3でこれを行う方法は確かにありますが、オブジェクトの配列を処理するときはまだわかりません。

何か助けは?

17
Sam Mason

JavaScriptに匿名関数を渡すことができます Array.prototype.sortindexでソートします。 D3には関数 d3.ascending(v 3.x) これにより、昇順でのソートが容易になります。

cities.sort(function(x, y){
   return d3.ascending(x.index, y.index);
})

そしてここに出力があります:

[
 {"city":"Brisbane","country":"Australia","index":208},
 {"city":"Hong Kong","country":"Hong Kong","index":214},
 {"city":"Sydney","country":"Australia","index":215},
 {"city":"Copenhagen","country":"Denmark","index":217},
 {"city":"San Francisco","country":"United States","index":218},
 {"city":"Paris","country":"France","index":219},
 {"city":"Singapore","country":"Singapore","index":228},
 {"city":"New York City","country":"United States","index":237},
 {"city":"Geneva","country":"Switzerland","index":259},
 {"city":"London","country":"United Kingdom","index":280}
]
30
mdml

ちょうど sort D3で使用する前の配列、as Travis J =コメントで言及。 D3を使用してソートする理由はありません( d3.ascendingはとにかく単なる比較ラッパーです )。

また、}必要な場所]宣言の最後。


次のように、各オブジェクトのプロパティにアクセスできます。

cities.sort(function(a, b){
    return a["index"]-b["index"];
});
4
Casey Falk