var a = new Array(array-length);
このように配列は配列の長さを引数とする
Array 型のオブジェクトとして生成します。
a[expression]
添字は 0 〜 array-length - 1 です。
var name = new Array(5); //名前
var score = new Array(5); //点数
name[0] = "さくら"; score[0] = 88;
name[1] = "知世"; score[1] = 90;
name[2] = "千春"; score[2] = 92;
name[3] = "奈緒子"; score[3] = 91;
name[4] = "利佳"; score[4] = 93;
//次の名前の生徒の点数を探し出して表示する
tmpname = "さくら";
for(var i = 0; i < 5; i++)
if(name[i] == tmpname) { //名前が一致したら
alert(score[i]); //表示
return;
}
var a = new Array(3); //長さ3を確保
alert(a.length); //3
a[5] = 1; //6番目の要素に代入すると
alert(a.length); //長さ6になる
配列の長さは Array オブジェクトを作るときに
いちおう決められますが、その範囲を超える要素にもアクセスできます。
おそらく、最初に長さを指定するのは、 length
プロパティを設定する以外に意味が無く
(別に3個分の領域を確保しているわけではない)、
var a = new Array();
としても何ら問題無いと思われます。
そして length プロパティにも
現在最大何番目の要素が定義されているかという意味しかないのでしょう。ただし、 length プロパティを小さくすると、 値が未定義になってしまうことがあります。
var a = new Array();
a[0] = "ケロちゃんの";
a[1] = "役立たず";
alert(a[0] + a[1]); //この時点では長さ2
a.length = 1; //長さ1とすると
alert(a[0] + a[1]); //a[1]が未定義に
function test4(form) { var a, str; a = new Array(); a["aaa"] = 4; //文字列を添え字に a.abc = 5; //プロパティの形でも alert(a.aaa); //どちらの形でもアクセスできる str = "abc"; alert("" + a[str]); }この添字に文字列を使うのは、プロパティの別の形と思われます。 というより、通常の添え字もおそらくプロパティで、 length プロパティに影響を及ぼすかもしれない、 という違いしかないのではないでしょうか。 つまり通常の添え字も自動的に文字列に変換されているのかもしれません。
function test5(form) { var a, str; a = new Array(); a[0] = 0; a[1] = 1; a["3"] = 2; alert(a.length); //上は通常の配列 alert(a["0"]); //a[0]と同じ alert(a["1.0"]); //a[1]とは違う }これで配列が実際にどう実装されているのかは分かりませんが、 とにかく使うと便利です。
var score = new Array();
score["さくら"] = 88; //名前を添え字に
score["知世"] = 90;
score["千春"] = 92;
score["奈緒子"] = 91;
score["利佳"] = 93;
//こちらが検索する必要はない
tmpname = "さくら";
alert(score[tmpname]); //一発で表示
まとめると、
var n = 50000;
var a = new Array();
var sum = 0;
for(var i = 0; i < n; i++)
a[i] = i;
for(i = 0; i < n; i++)
sum += a[a[i]];
alert(sum);
Dim n, sum, i
Dim a(49999)
sum = 0
n = 49999
For i = 0 To n
a(i) = i
Next
For i = 0 To n
sum = sum + a(a(i))
Next
MsgBox sum
下がVBScript版ですが、うちの環境で3倍くらい速いです。