Javascript对象通过键自行排序

时间:2017-03-01 14:44:36

标签: javascript sorting reactjs redux

快问问题,我正在使用扩展语法组合两个对象,新对象由前两个对象的键自动排序,我不希望我的新对象按键排序(因为我希望用户看到较旧的对话)我上面的redux状态和新获得的对话)。我该怎么办?

这是我的reducer,它接受一系列对话(数组第一次有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: {}
} 

出于显而易见的原因,为了向用户显示之前获取的内容以及之后获取的内容,我该怎么办?

1 个答案:

答案 0 :(得分:4)

Objects don't guarantee order,因此可以根据浏览器的实现来改变密钥。如果要维护订单,请考虑使用带有ID的对象数组。

如果您使用ID直接访问该对象,如果您转换为使用带ID的对象数组,则可能会发现array.find有用。