在JavaScript中按键对数组进行排序

时间:2011-08-23 19:26:51

标签: javascript arrays

我在JavaScript中创建了一个数组,并插入了具有object_ids键的对象:

var ar = [];

ar[4] = 'a';
ar[2] = 'b';
ar[8] = 'c';
ar[5] = 'd';

问题是当我打印出数组时,我得到的是:

[undefined, undefined, "b", undefined, "a", "d", undefined, undefined, "c"]

ar.length = 9

如何防止数组自动填充undefined值并将该数组保存为4元素数组?

对数组的迭代不是我期望的。

谢谢!

6 个答案:

答案 0 :(得分:3)

您可以使用对象文字而不是数组

var ar = {};
ar[4] = 'a';
ar[2] = 'b';
ar[8] = 'c';
ar[5] = 'd';
// {"2":"b","4":"a","5":"d","8":"c"}

你可以像这样迭代:

for (var i in a) {
    console.log(a[i]);
}

答案 1 :(得分:2)

这是你在做什么:

var ar = [];
ar[8] = 'c'; // creates [undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'c'];

我相信这就是你想要的:

var ar = {};

ar[4] = 'a';
ar[2] = 'b';
ar[8] = 'c';
ar[5] = 'd';

Object.keys(ar).length == 4; // true

有关Object.keys

的更多信息

答案 2 :(得分:1)

我认为您将JavaScript数组的行为与所有JavaScript对象的associative-array行为混淆。试试这个:

var a = {};
a[4] = 'a';
a[2] = 'b';
a[8] = 'c';
a[5] = 'd';
a; // {'2':'b', '4':'a', '8':'c', '5':'d'}

请注意,对象中的键/值对不以任何方式排序。要订购密钥或值,您必须维护自己的订购数组。

答案 3 :(得分:0)

你想做的可能是:

array = {}
array["1"] = "b"
array["7"] = "aaa"

现在数组是:

 Object { 1="a", 7="b"}

是不是?

答案 4 :(得分:0)

var arr = {
    0 : "hello",
    8 : "world",
    14: "!"
    };

var count = 0;
for (var k in arr) {
   ++count;
}

document.write(arr[0] + " " + arr[8] + arr[14] + " with a length of " + count );

输出hello world! with a length of 3

您可以使用对象..以下是如何收集计数(如果需要)

Fiddle

答案 5 :(得分:0)

无法保证使用for ... in语句以任何特定顺序迭代Object。 ECMA脚本规范中的行为未定义,引用:

  

枚举属性的机制......取决于实现。

在许多情况下,Chrome不按顺序迭代元素,上次我检查Opera的方式相同,刚才我读到here IE9采用了相同的行为。因此,保证保持元素关联和顺序的唯一解决方案是使用Object存储键和值,使用Array存储顺序:

var obj = { 4: 'a', 2: 'b', 8: 'c', 5: 'd' };
var order = [ 4, 2, 8, 5 ];

for( var i in order ) {
    //do something with obj[ order[i] ]
}