1

次のように定義された配列があります。

var subjectCache = [];

次に、それを構築するためのコードがいくつかありますが、これは正常に機能しています。

ただし、インデックスで配列を参照しようとすると、次のようになります。

var x = subjectCache[0];

また

var x = subjectCache[1];

私は得るundefined。またsubjectCache.length、常に 0 (ゼロ) です。

キーで参照しようとすると、次のようになります。

var x = subjectCache['12345'];

できます。

これは正常ですか?インデックスで参照できるようにすべきではありませんか?

私は Internet Explorer を使用しています。

[編集]

これは私が配列を構築するために使用しているコードですが、それが原因だとは思いません。

これは、Web サービス呼び出しからのコールバックです。これは正常に機能しており、アレイにデータが取り込まれています。

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

[/編集]

4

5 に答える 5

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);
}
于 2012-10-03T15:28:13.440 に答える
1

あなたの症状から、配列を連想配列として扱おうとしているように思えます。

Javascript では、配列は次のように機能します。

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

オブジェクトは次のように機能します。

var o = {};
o.myProp = true;
o["myOtherProp"] = false;
于 2012-10-03T15:24:51.223 に答える
1

配列は、文字列ではなく数値キーでのみ機能します。length文字列はオブジェクトにプロパティを割り当て、数値インデックスの一部としてもカウントされません。

配列を作成するときは、配列内の数値位置に割り当てていることを確認してください。

于 2012-10-03T15:25:30.290 に答える
1

いいえ、配列ではなくオブジェクトを作成しているため、機能しません。そのキーでアクセスする必要があります。

var x = subjectCache['12345'];

これが機能しても機能しない場合は、配列ではなくオブジェクトsubjectCache.lengthを作成していると思います。あなたが混乱しています。

于 2012-10-03T15:25:52.000 に答える
1

道のどこかで配列を失い、変数subjectCacheが別の種類のオブジェクトを指しています。

配列の場合、長さを 0 にすることはできず、 を使用して到達可能なアイテムを含めることはできませんsubjectCache['12345']。配列内の項目にアクセスする場合、数値インデックスまたは数値を表す文字列を使用しても違いはありません。

于 2012-10-03T15:32:08.373 に答える