【问题标题】:Sorting Values in Javascript [duplicate]在Javascript中对值进行排序[重复]
【发布时间】:2013-12-19 05:18:55
【问题描述】:

我知道排序:

var num = [1, 10, 6] 

num.sort(function(a,b){
  return a - b;
}

我不知道如何排序:

var num = [

       {"Bob": 1},

       {"Tim": 10},

       {"Tom": 6},
       ];

有什么想法吗???谢谢!

【问题讨论】:

  • 对象有不同的属性,所以它们应该有不同的含义。你想如何比较它们,因为它们没有共同点?一个 Bob 应该在十个 Tims 之前还是之后来?
  • 这个数组是不同对象的数组。

标签: javascript sorting key-value


【解决方案1】:

您显示的对象数组已经按属性名称的字母顺序排序,但如果您想按与属性名称未知的属性关联的值进行排序,它会变得有点复杂。

假设每个对象只有一个属性,并且您想按该属性的值进行排序,您可以这样做:

var num = [
   {"Bob": 1},
   {"Tim": 10},
   {"Tom": 6},
   ];

num.sort(function(a, b) {
   var aVal, bVal, k;
   for (k in a)
       aVal = a[k];
   for (k in b)
       bVal = b[k];
   return aVal - bVal;
});

// num is now [{"Bob":1},{"Tom":6},{"Tim":10}]

【讨论】:

  • 谢谢!我刚刚试了一下,效果很好。再次感谢。
  • 不客气。请记住,我展示的函数仅在您拥有具有单个属性的对象时才有效。 (因为一旦您有多个名称未知的属性,就无法确定要对哪一个进行排序,除非您通过假设只有一个属性具有数值并查找它而开始使其真正变得复杂财产,或类似的东西。)
【解决方案2】:

其实你可以使用上面提到的数组排序方法。

将对象移动到一个数组中,然后对该数组进行排序。

var sorted = [];
for (var person in num) {
    sorted.push([person, num[person]]);
}

sorted.sort(function(a,b) {
    return a[1] - b[1];
});

【讨论】:

  • 这不起作用。当您使用a[1] - b[1] 时,您会尝试减去两个对象,例如{"Bob":1} - {"Tom":6},得到NaN
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 2015-08-14
  • 2016-04-16
相关资源
最近更新 更多