2017-02-11 92 views
0

我在reactjs中订购我的对象键时遇到了问题。 我会从对象创建一个选择像这样从我的分贝:Order select Object key in select Reactjs

{ 
    liv_1:value, 
    liv_2:value, 
    liv_3:value, 
    . 
    . 
    . 
    liv_10:value, 
    liv_11:value 
} 

所以我在我的组件:

var selectLevel = 
     <select ref="level"> 
      <option value="" disabled>--Select level--</option> 
      { 
       Object.keys(objectLevel).map(function(el, k) { 
        return <option key={k} 
        value={el}>{el}</option>; 
       }) 
      } 
     </select> 

但我的问题是订货,东阳它重新排序像我的钥匙:

{ 
liv_1:value, 
liv_10:value, 
liv_11:value, 
liv_2:value, 
liv_3:value, 
. 
. 
. 
} 

如何维护订单?

回答

0

您可以使用自定义的比较像重新排列物品:

Object.keys(objectLevel) 
    .sort((a,b) => +a.split('_')[1] - +b.split('_')[1]) 
    .map(function(el, k) { 
     return <option key={k} value={el}>{el}</option>; 
    }) 
+0

是的,谢谢你!!但为什么它自动重新排序? – LorenzoBerti

+0

尝试检查你的服务器的响应,你的项目的顺序是什么? – Freez

+0

随着检查元素是错误的顺序,但在后端我发送数据按正确的顺序。 – LorenzoBerti

1

映射之前添加的sort的电话:

Object.keys(objectLevel).sort().map(function(el, k) { 
        return (<option key={k} 
        value={el}>{el}</option>); 
       }) 
+0

你好三江源,但它不工作,我相信,问题是从后端返回的对象 – LorenzoBerti

+0

顺便说一句,您的代码可以更优雅:Object.keys(objectLevel) .sort()。map((el,k)=>)' –

+0

@LorenzoBerti:将re (')'..我更新了相应的答案 –