![](/img/trans.png)
[英]How to sort and display an object based on its key value pairs JavaScript
[英]Sort javascript key/value pairs inside object
我在对对象内部的项目进行排序时遇到一些问题。 所以我有这样的事情:
var someObject = {
'type1': 'abc',
'type2': 'gty',
'type3': 'qwe',
'type4': 'bbvdd',
'type5': 'zxczvdf'
};
我想按值对someObject排序,这就是我遇到的问题。 我有排序功能,应该返回按值排序的键/值对:
function SortObject(passedObject) {
var values = [];
var sorted_obj = {};
for (var key in passedObject) {
if (passedObject.hasOwnProperty(key)) {
values.push(passedObject[key]);
}
}
// sort keys
values.sort();
// create new object based on Sorted Keys
jQuery.each(values, function (i, value) {
var key = GetKey(passedObject, value);
sorted_obj[key] = value;
});
return sorted_obj;
}
和获取密钥的功能:
function GetKey(someObject, value) {
for (var key in someObject) {
if (someObject[key] === value) {
return key;
}
}
}
问题出在最后一部分,当创建新的返回对象时-再次按键排序。 为什么? 这是当我必须对对象而不是对数组进行操作时的特定情况(是的,我知道那会更容易...)
有谁知道如何排序对象中的项目?
普通对象根本没有顺序。 数组是一种特殊的对象类型。
您可以拥有的最接近的对象是一个排序了对象值的数组。 例如:
_valuesOfAnObjectSorted = Object.keys(object).map(function(k){ return object[k]; }).sort();
您有两种可能性:
像这样:
var myObj = [
['type1', 'abc'],
['type2', 'gty'],
...
];
甚至更好,因为在某个地方使用它并不依赖于数组的位置,而是全名键:
var myObj = [
{name: 'type1', val:'abc'},
{name: 'type2', val:'gty'},
...
];
无论您要使用按键排序的对象,都可以将键提取为数组,对其进行排序并遍历以访问该对象
var ordKeys = Object.keys(myObj).sort(); // pass inside a function if you want specific order
var key;
for (var i = 0, len = ordKeys.length; i < len; i +=1) {
key = ordKeys[i]
alert(key + " - " + myObj[key]);
}
如果对象不是由您构造的,而是来自其他地方,则可以使用第二种方法来构造对象数组,就像第一种方法一样。 这样一来,您就可以以完美的顺序在任何地方使用阵列。
您可能要检查库underscore.js 。 那里有非常有用的方法,可以很容易地完成技巧。 带有一些映射的方法_.pairs可能会在一条语句中完成所有工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.