Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript多维数组排序_Javascript_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

Javascript多维数组排序

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输

我正在尝试按vCount(降序)对该数组进行排序,但我不知道如何进行排序。我已经搜索了堆栈溢出,但找不到与我的问题类似的内容

这就是我到目前为止想到的,我想这不起作用,因为vCount在数组中更深,但是如何在排序函数中在数组中更深

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。这只能部分工作,不幸的是它破坏了访问者数组。