我有一个集合(产品),我使用_.countBy
这样:
var totalByBrand = _.countBy(result, "Brand");
我有这个结果:
{
'Brand 1 ' : 5,
'Brand 2 ' : 45,
'Brand 3 ' : 2,
...
'Brand 99 ' : 25
}
我尝试对此结果进行排序以获得:
{
'Brand 3 ' : 2,
'Brand 1 ' : 5,
'Brand 99 ' : 25,
...
'Brand 2 ' : 45
}
是否可以使用_.sortBy()
?
答案 0 :(得分:3)
在JavaScript Does JavaScript Guarantee Object Property Order?中无法保证属性顺序,这意味着您无法对它们进行排序。
您必须使用不同的结构,可能是{brand: ..., count: ...}
之类的对象列表,并在count
上排序。例如
var totalByBrand = _.countBy(products, 'Brand');
var sorted = _.chain(totalByBrand).
map(function(cnt, brand) {
return {
brand: brand,
count: cnt
}
})
.sortBy('count')
.value();
和演示
var products = [
{Brand: "Brand 1", id: 1},
{Brand: "Brand 1", id: 2},
{Brand: "Brand 2", id: 3},
{Brand: "Brand 3", id: 4},
{Brand: "Brand 3", id: 5},
{Brand: "Brand 1", id: 6},
];
var totalByBrand = _.countBy(products, 'Brand');
var sorted = _.chain(totalByBrand).
map(function(cnt, brand) {
return {
brand: brand,
count: cnt
}
}).sortBy('count')
.value();
console.dir(
sorted
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.0/underscore-min.js"></script>