2014-01-17 44 views
0

我需要一個數據結構,類似於一個對象,但對我來說,我需要的關鍵是對象本身:我需要一種方式來訂購的對象

tree = { { "a": 1, "t": "text }: 42 } 
tree[ { 'b': true, 'c': 15 } ] = 'hello' 

我可以很容易地模仿這一點,如果我在哪裏可以給兩個鍵/對象一個strikt weak order。但顯然{ "a": 1 } < { "a": 2 }不會產生任何有用的東西。即使我提取鍵值對,並按鍵排序,我也必須找到一種方法來比較關鍵對象中的值。

我可以將鍵串化爲json字符串,但我不確定,如果有保證,當我這樣做時,結果總是相同的,這個解決方案看起來有點難看我。

有關如何實現這樣的數據結構(如果可能,簡單,高性能和優雅)的任何想法,提示或指針?

編輯:我需要這個發佈/訂閱庫。要訂閱的節點由對象命名。對於客戶端庫,我必須做一些記錄以獲得訂閱的狀態。

舉個例子,我怎麼能解決這陣:

[ { a: 1 }, { b: 2 }, { a: true, b: false, c: "hello" }, { d:'yes' } ] 
+0

JavaScript有數組和對象,這是它的數據結構。你能發表一個你爲什麼需要這個的真實例子嗎?您應該能夠以某種方式用JS表示您的結構,並使用有效的語法。 – elclanrs

+0

@elclanrs是的,但你如何給兩個對象一個訂單? –

+0

如果這就是你的意思,你會使用一個集合(一個對象數組)。 – elclanrs

回答

2

但顯然{ 「一」:1} {< 「一」:2}不產生任何有用的東西。即使我提取鍵值對,並按鍵排序,我也必須找到一種方法來比較關鍵對象中的值。

你不能比較的對象,但你可以寫一個函數來檢查一個對象的值對另一:

var arr = [ 
    { "a": 1 }, 
    { "a": 2 } 
]; 

function test(obj1, obj2){ 
    return obj1.a < obj2.a; 
} 

console.log(test(arr[0], arr[1])); // true 

Demo

這就是你想要的?

此外,這裏的排序對象的陣列的方法,通過鍵:

function compare(a,b) { 
    if (a.a < b.a) 
    return -1; 
    if (a.a > b.a) 
    return 1; 
    return 0; 
} 

arr.sort(compare); 

Updated fiddle

+0

由於對象充當密鑰,並且密鑰由用戶應用程序提供,所以我事先不知道密鑰具有哪些密鑰,也不可能密鑰具有所有相同的密鑰。我會添加一個例子。非常感謝! –

相關問題