【问题标题】:How to sort an associate array by value's property [duplicate]如何按值属性对关联数组进行排序[重复]
【发布时间】:2016-04-02 03:11:09
【问题描述】:

你会如何通过 values 属性对关联数组进行排序?值本身是具有多个属性的对象,并且对象的属性之一是字符串。我希望能够按字符串的字母顺序重新排列数组。这可能吗?

我尝试在几个地方寻找答案,包括这里: How to sort an array of associative arrays by value of a given key in PHP?

How to sort an associative array by its values in Javascript?

How to sort an (associative) array by value?

我不认为那些回答了我的问题......尤其是没有以我理解的方式。任何帮助,将不胜感激。 示例:

Object = {
    1: obj.prop = "C", 
    5: obj.prop = "A, 
    3: obj.prop = "B
}

我想要:

Object = {
    5: obj.prop = "A",
    3: obj.prop = "B",
    1: obj.prop = "C"
}

【问题讨论】:

  • (1) JavaScript 对象有点类似于“关联数组”,但它们实际上并不完全相同,并且 (2) 对象中的属性没有特定的顺序; “排序”没有意义。
  • 您可以使用Object.keys() 提取属性名称的数组,按您喜欢的方式对其进行排序,然后遍历它以按该顺序访问对象属性。跨度>
  • 第二个链接完美运行
  • @John 对象属性可以以数字开头,只要它们是字符串。 {"0":1} 是一个有效对象,{"0":1,"00":1} 也是如此。
  • 其他问题和答案你不明白的地方是什么?如果您对这些答案有单独的问题,请发布该问题;否则,这是重复的。

标签: javascript


【解决方案1】:

在 Javascript 中,关联数组(对象)没有顺序。

这意味着不可能将结果存储在对象中。相反,您可以将其存储在 {key,value} 对象的数组中。

var obj = {
    "1":{prop:"C"},
    "5":{prop:"A"},
    "3":{prop:"B"},
}

var res = [];
for(var i in obj){
    res.push({
        key:i,
        value:obj[i]
    });
}   

res.sort(function(a,b){
    return a.value.prop > b.value.prop ? -1 : 1;
});

/*res == [
    {key:5,value:{prop:"A"}},
    {key:3,value:{prop:"B"}},
    {key:1,value:{prop:"C"}},
]*/

【讨论】:

  • 我认为在排序中,三元运算符应该是 a.value.prop > b.value.prop ? 1:-1;相反,但你给了我我需要弄清楚的东西。非常感谢!
猜你喜欢
  • 2013-05-11
  • 1970-01-01
  • 2014-08-25
  • 2011-06-01
  • 2013-04-23
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多