簡體   English   中英

按對象的值之一對對象進行排序

[英]Sort object by one of its values

我正在嘗試按值從最小到最大的順序對對象進行排序。 例如:

{
    obj1: {
        key1: something,
        key2: 54,
        key3: "something else"
    },
    obj2:{
        key1: something,
        key2: 27,
        key3: "another thing"
    },
    obj3:{
        key1: anotherSomething,
        key2: 78,
        key3: "whatever"
    }
}

當按key2排序時,應以obj2obj1obj3 有什么辦法可以做到嗎?

PS我已經看到在Stack Overflow上有一些與此類似的線程,但是它們是通過未嵌套的對象(即{ obj1: 5, obj2: 3, obj3: 8}對它進行排序的

如果您不能將對象更改為數組(如您在其中的一條評論中所告知),則可以引入一個數組,該數組包含對要排序的對象的引用,然后使用該數組訪問這些對象:

var obj = {
    obj1: {
        key1: something,
        key2: 54,
        key3: "something else"
    },
    obj2:{
        key1: something,
        key2: 27,
        key3: "another thing"
    },
    obj3:{
        key1: anotherSomething,
        key2: 78,
        key3: "whatever"
    }
};

var arr = [ obj.obj1, obj.obj2, obj.obj3 ];
arr.sort( function( a, b ){
   return a.key2 - b.key2;
} );

首先,您需要將對象轉換為數組。 這是必須的,因為對象字段不是按自然順序排列的。 這是一個這樣的數組的例子:

var arr =
[
    {
        key1: something,
        key2: 54,
        key3: "something else"
    },
    {
        key1: something,
        key2: 27,
        key3: "another thing"
    },
    {
        key1: anotherSomething,
        key2: 78,
        key3: "whatever"
    }
];

當擁有數組時,可以用不同的方式對它的元素進行排序。 例如,如果您使用Underscore.js,則可以執行以下操作:

_.sortBy(arr, 'key2');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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