質問

Jscriptにスパース配列があり、null以外の要素が負のインデックスと正のインデックスの両方で発生しています。 for inループを使用しようとすると、配列は最低(負の)インデックスから最高の正のインデックスに移動しません。代わりに、要素を追加した順序で配列を返します。列挙も機能しません。それを可能にする方法はありますか?

arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";

ループするとき、A、Cの順にBが返されます。

役に立ちましたか?

解決

技術的には、「A」負のインデックスを持つことができないため、配列にはまったくありません。これは、arrNameオブジェクトの単なるメンバーです。 arrName.lengthを確認すると、21(0,1,2、...、20)であることがわかります。代わりにプレーンオブジェクトを(ハッシュテーブルとして)使用しないのはなぜですか。このような何かが動作するはずです:

<script type="text/javascript">
//define and initialize your object/hastable
var obj = {};
obj[20] = 'C';
obj[10] = 'B';
obj[-10] = 'A';

// get the indexes and sort them
var indexes = [];
for(var i in obj){
    indexes.push(i);
}
indexes.sort(function(a,b){
    return a-b;
});

// write the values to the page in index order (increasing)
for(var i=0,l=indexes.length; i<l; i++){
    document.write(obj[indexes[i]] + ' ');
}
// Should print out as "A B C" to the page
</script>

他のヒント

Javascriptの Array sと Object sの境界にぶつかっています。配列要素は、0〜4294967294の整数(最大符号なし32ビット整数-1)を含む序数でアクセスされます。オブジェクトのプロパティには名前でアクセスします。 -10は有効な序数ではないため、名前として解釈されます。以下に簡単な例を示します。

var arr = new Array();
arr[0] = 'A';
arr[1] = 'B';
arr[-1] = 'C';
arr.length

結果は2です。配列には、インデックス0と1の2つの要素しかありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top