var a = new array(); a [1] ='A'; b [10] ='B'; 的console.log(a)的 / [undefined,“A”,undefined,undefined,undefined,undefined,undefined,undefined, undefined,undefined,“B”] / 我想删除未定义的元素 但是过程是什么?
答案 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
的数组。 1
和10
之间的所有字段都没有定义,这意味着这些字段正确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';