对 _.countBy 的结果进行排序
Sorting the results of _.countBy
我有一个系列(产品),我这样使用 _.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()
可以吗?
无法保证 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>
我有一个系列(产品),我这样使用 _.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()
可以吗?
无法保证 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>