我试图在vCount(降序)上对此数组进行排序,但我无法弄清楚如何执行此操作。我已经搜索了堆栈溢出但我无法找到与我的问题相似的任何内容。
这就是我提出的这个问题,我想这不起作用,因为vCount在数组中更深,但我如何在sort函数中深入了解数组?
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 ] ]
答案 0 :(得分:0)
从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;
}
答案 1 :(得分:0)
我建议您将数据结构强制转换为可以轻松排序的内容:
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允许您用相应的数据替换每个键,从而将原始对象强制转换为数组。然后可以对数组进行排序。