Javascript多维数组排序

时间:2014-05-25 20:08:05

标签: javascript arrays sorting multidimensional-array

我试图在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 ] ]

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允许您用相应的数据替换每个键,从而将原始对象强制转换为数组。然后可以对数组进行排序。