Сортировка объектов на основе значения свойства в 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, но я еще не понял его при работе с массивом объектов.
Любая помощь?
Ответы
Ответ 1
Вы можете передать анонимную функцию в Javascript Array.prototype.sort
для сортировки по index
. 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}
]
Ответ 2
Просто sort
массив, прежде чем использовать его в D3, как Travis J, упомянутых в комментарии. Нет причин использовать D3 для сортировки (d3.ascending
- это просто оболочка сравнения в любом случае).
Также обратите внимание, что у вас есть }
, где вы хотите ]
в конце объявления.
Доступ к каждому объекту можно получить так:
cities.sort(function(a, b){
return a["index"]-b["index"];
});