2017-03-01 13 views
0

私は2つのオブジェクトをスプレッドシンタックスで結合しています。新しいオブジェクトは前の2つのオブジェクトのキーによって自動的にソートされます。新しいオブジェクトをキーでソートする必要はありません。上記の私の還元状態の古い会話と新しく取った会話を見たいと思っています)。私に何ができる?ここで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

関連する問題