[英]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.