javascript数组索引问题!

时间:2010-08-04 06:27:31

标签: javascript arrays indexing

var a = new array();     a [1] ='A';     b [10] ='B';     的console.log(a)的     / [undefined,“A”,undefined,undefined,undefined,undefined,undefined,undefined,       undefined,undefined,“B”] / 我想删除未定义的元素 但是过程是什么?

4 个答案:

答案 0 :(得分:6)

首先,jQuery与此无关。

其次,阵列是“自动填充”的。如果定义索引10,则所有索引0 - 9将自动占用,这就是Javascript数组的工作方式。

您正在寻找的东西可能是一个对象:

var a = {};
a[1] = 'A';
a[10] = 'B';

var a = {
    1 : 'A',
    10 : 'B'
};

答案 1 :(得分:1)

好吧,删除那些undefined部分

a[0] = 'A';
a[1] = 'B';

在您的代码段中,您使用索引10填充元素,这会强制ECMAscript创建一个10 fields的数组。 110之间的所有字段都没有定义,这意味着这些字段正确undefined

要删除这些字段,您必须将一个正确的值或map non-undefined值设置为一个新数组,如果您首先创建一个正确的数组,这将是不必要的。

创建一个真实的object而不是一个数组(实际上也是一个对象),以获得所需的行为。

var a = {};

a[1] = 'A';
a[2] = 'B';

console.log(a);

答案 2 :(得分:1)

在这种情况下,您可以使用Object代替Array,如下所示:

var a = {}; // or var a = new Object();
a[1] = 'A';
a[10] = 'B';
a['foo'] = 'bar';
a.bar = 'foo'; // same as a['bar'] = 'foo';
console.log(a);

答案 3 :(得分:1)

数组总是从0开始,然后上升到最后一个填充的索引。 您可以使用对象来解决您的问题:

var a = {};
a[1] = 'A';
a[10] = 'B';