关联数组/密钥对数组在Javascript中按随机顺序排列。

时间:2013-07-03 09:34:55

标签: javascript arrays key-value

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

例如,

当我创建一个数组

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

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

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

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

2 个答案:

答案 0 :(得分: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] ] );
}

修改

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

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 );
}

答案 1 :(得分: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等是包含数字的变量。