javascript - 无法按索引引用数组

标签 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;
    }
}

[/编辑]

最佳答案

您可能手动分配键而不是使用 subjectCache.push() 将新元素添加到数组:

var array = [];

array['foo'] = 'bar';

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

length 属性不会以您期望的方式反射(reflect)这些变化:

> 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);
}

关于javascript - 无法按索引引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711645/

相关文章:

javascript - 使用 .reduce 函数进行某些计算并返回带有数组结果的对象

c++ - 程序在 C++ 中的 for 循环后结束

javascript - 循环对象数组,并根据某些条件生成新数组

c++ - 使用递归查找数组中的第 k 个最小元素?

javascript - 如何使用 JavaScript 刷新 Laravel 中的包含 View 而不是整个 View ?

javascript - highcharts 列宽度和边框顶部

javascript - 如何删除两个标签之间的文本?

C 动态数组

javascript - event.keyCode 返回土耳其字符 "ö"的逗号 (188) 的值

javascript - 使用 Bootstrap3 为 block 中的 div 设置相同的高度