2013-11-14 250 views
0

如何通过按键按字母顺序排序此对象?按键排序关联数组/ javascript对象按字母顺序排序

我尝试:

racks.sort(); 

目的机架填充这样的:

(Statdev是一个字符串,和kartnr和bitnrk是整数)

racks[jPunten[i].STATDEV] = { 
          label: '', 
          punkt: [{ 
          x: jPunten[i].KARTNR, 
          y: jPunten[i].BITNRK}] 

一些萤火虫输出(我还注意到,在萤火虫中,物体是按字母顺序排列的):

racks 
    [] 

DAY 
    Object { punkt=[8], label=""} 

label 
    "" 

punkt 
    [Object { x="12", y="1"}, Object { x="12", y="2"}, Object { x="12", y="3"}, 5 meer...] 

0 
    Object { x="12", y="1"} 

1 
    Object { x="12", y="2"} 

2 
    Object { x="12", y="3"} 

3 
    Object { x="12", y="4"} 

4 
    Object { x="12", y="5"} 

5 
    Object { x="12", y="6"} 

6 
    Object { x="12", y="7"} 

7 
    Object { x="12", y="8"} 

LSF01 
    Object { punkt=[1], label=""} 

label 
    "" 

punkt 
    [Object { x="1", y="10"}] 

0 
    Object { x="1", y="10"} 

x 
    "1" 

y 
    "10" 
+0

JavaScript对象中没有内在的顺序。如果您需要可靠的排序,请创建一个键数组并对其进行排序。 – Sirko

+0

您无法对对象进行排序。它们按键名自动排序(大多数情况下)。 –

回答

1

在JavaScript中无法通过键排序对象属性。如果你需要它,你可以把数组的所有键,排序它们,然后按照期望的顺序处理属性。

1

尝试这种情况:

sort = function(obj, comparator) { 
    var array = []; 
    for (var i in obj) { 
     array.push([obj[i], i]); 
    } 
    array.sort(function(o1, o2) { 
     return comparator(o1[0], o2[0]); 
    }); 
    var newObj = {}; 
    for (var i = 0; i < array.length; i++) { 
     newObj[array[i][1]] = array[i][0]; 
    } 
    return newObj; 
} 
+0

什么是比较器?你能给个例子吗? – Rubicksman

0

执行两个数组:

  • 一个阵列用于键
  • 第二关联数组,使用密钥 值对,其实是一个对象。

//正常的对象符号

var personObject = {firstName:"John", lastName:"Doe"}; 
alert('personObject.firstName - ' + personObject.firstName); 

//添加使用对象的数组符号,注反对:这样做将数组转换为对象

personObject["age"] = 46; 

//数组按键排序

var keysArray = ["firstName", "lastName"]; 
keysArray[keysArray.length] = "age"; 
keysArray.sort(); 

//获取对象值,使用以数组为键的数组 - 对象表示法

alert('personObject[keysArray[0]] - ' + personObject[keysArray[0]]);