0

是否可以按随机键顺序排列关联阵列/密钥对阵列。每当我添加一个新元素时,javascript 都会自动对键进行排序。

例如,

当我创建一个数组时

a[T1001] ="B"
a[T1005] = "A"
a[T1003] ="C"

后来验证了数组列表,我看到数组自动排序为:

a[T1001]
a[T1003]
a[T1005] 

是否可以保留我将值分配给数组的相同顺序?我不能使用 Push 方法。它创建一个索引数组,其中添加了单个对象作为其值。

4

2 回答 2

3

JavaScript 中的对象(您的“数组”在这里只是一个对象)没有您可以依赖的属性的固有顺序。

作为一种解决方法,您可以将键的顺序存储在单独的数组中:

var order = [];

a['T1001'] = "B";
order.push( 'T1001' );
a['T1005'] = "A";
order.push( 'T1005' );
a['T1003'] = "C";
order.push( 'T1003' );

如果您然后遍历订单数组,您可以获得所需的订单:

for( var i=0; i<order.length; i++ ) {
  console.log( a[ order[i] ] );
}

编辑

从第一个列表中删除元素需要使用indexOfand splice()

function delElement( arr, order, index ) {
  // get the position of the element within the order
  var position = order.indexOf( key );

  // delete element from list
  delete arr[ order[ pos ] ];

  // remove from ordering array
  order.splice( pos, 1 );
}
于 2013-07-03T09:42:23.860 回答
0

在我看来,好像您在使用一个对象。永远无法保证对象属性的排序。我不认为 Internet Explorer(至少是旧版本)对属性进行排序,但 chrome 默认情况下会这样做。

您的代码无效,如果它们不是数字,它应该具有字符串形式的属性。你必须使用一个对象

a = {};
a["T1001"] ="B"
a["T1005"] = "A"
a["T1003"] ="C"

如果要保留顺序,可以使用两个数组来存储属性和值,或者如果坚持使用对象,则不能保证顺序。

两个数组

a1 = []; a2 = []
a1[0] = "T1001"; a2[0] = "B";
a1[1] = "T1005"; a2[1] = "A";
a1[2] = "T1003"; a2[2] = "C"; 

编辑:除非我猜到你的意思是错误的,并且 T1001 等是包含数字的变量。

于 2013-07-03T09:42:17.320 回答