我在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元素数组?
对数组的迭代不是我期望的。
谢谢!
答案 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
的更多信息
答案 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
您可以使用对象..以下是如何收集计数(如果需要)
答案 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] ]
}