我试图在vCount(降序)上排序这个数组,但我不知道如何做到这一点。我已经搜索了堆栈溢出,但我找不到任何类似于我的问题。
这就是我到目前为止想到的,我想这不起作用,因为vCount在数组中更深,但我如何在排序函数中得到更深的数组?
var nar = trck_urls.sort(function(a, b){ // trck_urls is the array
return b['vCount'] - a['vCount'];
});
这是我要排序的数组。(console.log输出)
[ '/home': [ pageTitle: 't1',
Visitors: [ 'oPc-Gr6SYxN1AMyw8Pst' ],
vCount: 1 ],
'/dash': [ pageTitle: 't2',
Visitors: [ 'jepoSdBR9_ur3XSu8Psu', 'WIO4fEt1Ue8yHCly8Psv' ],
vCount: 2 ] ]
我建议您将您的数据结构强制转换为易于排序的内容,如:
var trck_urls = [
{ path:'/home',
pageTitle: 't1',
Visitors: ['oPc-Gr6SYxN1AMyw8Pst'],
vCount: 1 },
{ path:'/dash',
pageTitle: 't2',
Visitors: ['jepoSdBR9_ur3XSu8Psu', 'WIO4fEt1Ue8yHCly8Psv' ],
vCount: 2 }
];
var sorted = trck_urls.sort(function(a,b){
return b.vCount - a.vCount;
});
如果需要将数据存储为对象,则可以在需要排序时将该对象强制转换为数组,如下所示:
var sortUrls = function(dict){
return Object.keys(dict).map(function(key){
var item = dict[key];
item.path = key;
return item;
}).sort(function(a, b){
return a.vCount - b.vCount;
});
}
var trck_urls = {
'/home' : {
pageTitle: 't1',
Visitors: ['oPc-Gr6SYxN1AMyw8Pst'],
vCount: 1 },
'/dash' : {
pageTitle: 't2',
Visitors: ['jepoSdBR9_ur3XSu8Psu', 'WIO4fEt1Ue8yHCly8Psv' ],
vCount: 2 }
};
var sortedUrls = sortUrls(trck_urls);
在本例中,Object.keys()给出列表
['/home', '/dash']
和map允许您用相应的数据替换每个键,从而将原始对象强制转换为数组。
从sort
函数的角度来看,您试图排序的实际上是一个具有一堆附加属性(/home
, /dash
)的空数组。因此,如果要对它们进行排序,首先需要创建一个数组,其中的元素是原始数组的属性:
var array = [];
for (var key in nar) {
array.push({key:key, value:nar[key]});
}
array.sort(function(a,b){
return b.value.vCount - a.value.vCount;
}