2016-03-15 109 views
0

我正在嘗試通過其中一個值從最小到最大排序一個對象。例如:按其值之一對對象排序

{ 
    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。有什麼辦法可以做到這一點?

P.S.我已經看到堆棧溢出中有一些類似的線程,但它們是通過一個沒有嵌套的對象進行排序的,即{ obj1: 5, obj2: 3, obj3: 8}

+2

您所要求的是不可能的 - 您無法對對象的屬性進行排序。作爲一種替代方法,你可以將此轉換爲對象的數組,然後使用'排序()' –

+0

*「我已經看到了,有一些類似的線程這個堆棧溢出」 *不管他們建議那裏,你可以在這裏申請。 –

+0

@RoryMcCrossan是否可以使用排序算法?我會給你一個代碼。 – yul757

回答

1

如果你不能改變的對象數組(如你在一個評論告訴我們),你可能會引入與陣列引用您想要排序的對象,然後使用該數組訪問這些對象:

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; 
}); 
+0

是的,這工作:)謝謝 –

0

首先,您需要將對象轉換爲數組。這是必須的,因爲對象字段不是按性質排序的。這裏有這樣一個數組的例子:

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'); 
+0

不幸的是我使用的火力地堡,所以我不能改變它到一個數組:( –

+1

我不KNW火力地堡,但我相信,如果它是支持Javascript和JS對象,它將支持陣列了。如果你不能能夠使用下劃線.js你可以嘗試一些排序算法,但你不應該知道數組不會支持。 –