在数组中排序值后,保持键的值?

时间:2013-07-24 15:52:21

标签: javascript arrays

我是JavaScript新手;请随时用我的技术术语来纠正我。

我有一组附加到列表的键值对。该列表显示为下拉菜单,其中键的值是显示的选项,键包含在HTML标记中。我的老板要我按字母顺序对这些显示值进行排序。

到目前为止,我已使用for ... in循环遍历对象,并将每个键的值提取到数组中。我对数组进行了排序,现在我可以按字母顺序将值附加到列表中。

将密钥与各自的值相关联的最佳方法是什么,这样当我附加值时,也可以添加相应的键?

感谢。

SHORT VERSION:在将所有值复制到数组中并按字母顺序排序后,如何将键匹配回其值?

3 个答案:

答案 0 :(得分:2)

您可以在没有单独阵列的情况下执行此操作。只需使用比较功能(即比较器)。例如:

var arr = [
    {k: "c", v: 3},
    {k: "b", v: 2},
    {k: "d", v: 4},
    {k: "a", v: 1},
    {k: "e", v: 5}
];

//sort by value
arr.sort(function(a, b) {
   return a.v - b.v;
});

这会给你:

[
   {
      "k": "a",
      "v": 1
   },
   {
      "k": "b",
      "v": 2
   },
   {
      "k": "c",
      "v": 3
   },
   {
      "k": "d",
      "v": 4
   },
   {
      "k": "e",
      "v": 5
   }
]

要根据字符串值进行排序,您可以执行以下操作:

arr.sort(function(a, b) {
    return a.v.localeCompare(b.v);
});

答案 1 :(得分:0)

不要单独对值进行排序,对2D数组进行排序 - 数组数组。

所以它看起来像

Key1 | Val1
-----------
Key2 | Val2
-----------
Key3 | Val3

然后根据值进行排序,但同时移动两者。

排序时,它可能看起来像

Key3 | Val3
-----------
Key1 | Val1
-----------
Key2 | Val2

然后,当您引用第一个值时,您会array[0][1],而对于该值的键,您将执行array[0][0]

答案 2 :(得分:0)

您需要自定义排序功能。

var ar = [ {key: 1, value: "One"}, {key: 2, value: "Two"}, {key: 3, value: "Three"} ];

var sortFunction = function(kv1, kv2) {
    return kv1.value.localeCompare(kv2.value);
};

ar.sort(sortFunction);