Javascript多维数组排序
我正在尝试按vCount(降序)对该数组进行排序,但我不知道如何进行排序。我已经搜索了堆栈溢出,但找不到与我的问题类似的内容 这就是我到目前为止想到的,我想这不起作用,因为vCount在数组中更深,但是如何在排序函数中在数组中更深Javascript多维数组排序,javascript,arrays,sorting,multidimensional-array,Javascript,Arrays,Sorting,Multidimensional Array,我正在尝试按vCount(降序)对该数组进行排序,但我不知道如何进行排序。我已经搜索了堆栈溢出,但找不到与我的问题类似的内容 这就是我到目前为止想到的,我想这不起作用,因为vCount在数组中更深,但是如何在排序函数中在数组中更深 var nar = trck_urls.sort(function(a, b){ // trck_urls is the array return b['vCount'] - a['vCount']; }); 这是我正在尝试排序的数组。(console.log输
var nar = trck_urls.sort(function(a, b){ // trck_urls is the array
return b['vCount'] - a['vCount'];
});
这是我正在尝试排序的数组。(console.log输出)
从
排序
函数的角度来看,您试图排序的实际上是一个带有大量附加属性的空数组(/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;
}
我建议您将数据结构强制转换为以下易于排序的内容:
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);
如果需要将数据存储为对象,则可以在需要对其进行排序时将对象强制为数组,如下所示:
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']
映射允许您用相应的数据替换每个键,从而将原始对象强制为数组。然后可以对数组进行排序。数组中的对象语法无效,无法对对象进行排序。如果这是
console.log
的输出,则您已经完成了排序。如果是您的脚本,则会出现语法错误。@Dalorzo这不是问题,因为它是用于Node.JS的,但感谢您提及它。@Bergi console.log输出是的。等我有时间的时候,我会读这篇文章。嗨,埃里克,我喜欢这样的结构,但是我需要能够通过路径获得vCount、访问者和页面标题。这就是为什么我选择使用路径作为键。或者有没有其他方法可以通过这种结构通过路径获取值?我更新了答案,以展示如何将数据存储在对象中,其中路径是键,并在排序之前将该对象强制为数组。谢谢Noziar。这只能部分工作,不幸的是它破坏了访问者数组。