簡體   English   中英

在對象內對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM