我是JavaScript新手;请随时用我的技术术语来纠正我。
我有一组附加到列表的键值对。该列表显示为下拉菜单,其中键的值是显示的选项,键包含在HTML标记中。我的老板要我按字母顺序对这些显示值进行排序。
到目前为止,我已使用for ... in循环遍历对象,并将每个键的值提取到数组中。我对数组进行了排序,现在我可以按字母顺序将值附加到列表中。
将密钥与各自的值相关联的最佳方法是什么,这样当我附加值时,也可以添加相应的键?
感谢。
SHORT VERSION:在将所有值复制到数组中并按字母顺序排序后,如何将键匹配回其值?
答案 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);