2017-03-01 86 views
0

快速問題傢伙,我使用擴展語法組合兩個對象,新對象通過前兩個對象的鍵自動排序,我不希望我的新對象按鍵排序(因爲我希望用戶看到上面的我的redux狀態中的舊對話和新提取的對話)。我能做什麼?Javascript對象通過鍵自我排序

這裏是我的減速,這需要對話的陣列(排列有3個對話首次四周,然後用+1命中另一個),和基於會話ID創建對象

case actions.SET_CONVERSATION_MESSAGES: { 
let convos = {}; 
payload.chatinbox.forEach(message => { 
    if (state[ message.chatsession_id ]) { 
    convos = Object.assign(convos, { 
     [ message.chatsession_id ]: { 
     messages: [...state[ message.chatsession_id ].messages, message] 
     } 
    }); 
    } else if (!state[ message.chatsession_id ]) { 
    convos = Object.assign(convos, { 
     [ message.chatsession_id ]: { 
     messages: [message] 
     } 
    }); 
    } 
}); 
return { 
    ...convos, 
    ...state 
    }; 
} 

這裏是如何的狀態對象看

{ 
14632: {}, 
14652: {}, 
14741: {} 
} 

,當一個新的對話來在有

{ 
    14542: {} 
} 
之間配合的關鍵

新對象都會自動通過他們

{ 
14632: {}, 
14542: {}, 
14652: {}, 
14741: {} 
} 

和我想要的結果排序是

{ 
14632: {}, 
14652: {}, 
14741: {}, 
14542: {} 
} 

爲明顯的原因,顯示用戶什麼是牽強之前,什麼是後來取,什麼都可以我做?

回答

4

Objects don't guarantee order,所以可以根據瀏覽器實現混洗這些密鑰。如果您希望維護訂單,請考慮使用帶有ID的對象數組。

如果您使用ID直接訪問對象,如果您轉換爲使用帶有ID的對象數組,則可能會發現array.find有幫助。

+0

要添加到此,我想我讀的地方,瀏覽器處理不同的對象屬性排序 – Kaddath

+0

什麼是鏈接中提到的地圖對象?我可以在這裏使用它嗎 – eersteam

+0

你有一個鏈接,解釋具有ID的對象數組嗎? – eersteam