无法通过索引引用数组

时间:2012-10-03 15:22:00

标签: javascript arrays

我有一个数组定义为:

var subjectCache = [];

然后我有一些代码来构建它,这是正常的。

但是,如果我尝试通过索引引用数组,例如:

var x = subjectCache[0];

var x = subjectCache[1];

我得到undefined。 此外subjectCache.length始终为0(零)。

如果我试图用它的键引用它,例如:

var x = subjectCache['12345'];

它有效。

这是正常的吗?我不能用它的索引来引用它吗?

我正在使用Internet Explorer,如果它有所作为(它可能会:()

[编辑]

这是我用来构建阵列的代码,虽然我真的不认为这是责任。

它是来自网络服务电话的回调。这工作正常,阵列正在填充。

var subjectCache = [];
var subjectCacheCount = 0;

function refreshSubjectsCallback(data) {
    // update subjects
    // loop through retrieved subjects and add to cache
    for( i=0; i < data.length; i++ )
    {
        var subject = data[i];
        var subjectid = subject.SubjectId;
        subjectCache[subjectid] = subject;
        subjectCacheCount += 1;
    }
}

[/编辑]

5 个答案:

答案 0 :(得分:3)

您可能手动分配密钥而不是使用subjectCache.push()向阵列添加新元素:

var array = [];

array['foo'] = 'bar';

console.log(array.length);  // 0

length属性不会以您期望的方式反映这些更改:

> var a = [];
undefined
> a[100] = 2;  // The previous `100` entries evaluate to `undefined`
2
> a.length;
101

相反,请使用对象:

var object = {};

object['foo'] = 'bar';

for (var key in object) {
    var value = object[key];

    console.log(value);
}

答案 1 :(得分:0)

根据您的症状,听起来您正在尝试将数组视为关联数组。

在Javascript中,数组的工作方式如下:

var a = [];
a[1] = 10;
alert(a.length);

对象的工作原理如下:

var o = {};
o.myProp = true;
o["myOtherProp"] = false;

答案 2 :(得分:0)

数组只能使用数字键而非字符串。字符串为对象指定属性,不计入length的一部分,也不计算数字索引。

构建数组时,请确保指定数组中的数字位置。

答案 3 :(得分:0)

不,它不起作用,因为你没有创建数组而是对象。 你必须通过它的密钥访问它。

var x = subjectCache['12345'];

如果这样做而且subjectCache.length没有,我认为你正在制作对象而不是数组。你很困惑。

答案 4 :(得分:0)

在路上某处你丢失了数组,变量subjectCache指向不同类型的对象。

如果它是一个数组,则它的长度不能为零,并且包含一个可以使用subjectCache['12345']访问的项目。当您访问数组中的项目时,如果您使用数字索引或表示数字的字符串,则没有任何区别。