多次元配列を動的に構築しようとしています。
動的に構築したい理由は、配列が 5 桁のチャンクで 1 ~ 1000 のように大きくなった場合です。
次のように書くと非常に時間がかかります。
[1, 2, 3, 4, 5],,,,,[996, 997, 998, 999, 1000]
今日は一日中苦労していたので、今は完全に立ち往生しているので、この質問を投稿することにしました。
これは、動的に構築したい配列です (解決済みの私の以前の投稿):
多次元配列シャッフル ランダム
動的配列が適切に構築されたら、fisherYates() 関数を 'outerArr.forEach(fisherYates); で呼び出したいと思います。 ' 次のような結果を得るには:
[4,2,3,5,1],[7,10,6,9,8],[11,15,12,14,13],[18,17,16,20,19],[22,21,25,23,24]
配列は、画像のフェードアウト/フェードインに使用されます。
1. フェードイン 5 つのランダム画像の最初のセット 1-5
2. フェードアウトの最初のセット
3. 5 つのランダム画像の 2 番目のセット 6-10
4. フェードアウトの 2 番目のセット
5. 5 つのランダム画像の 3 番目のセット 11-15
6.などの上....
次のような配列値を使用します。
$currImg = $('.rotator-image:visible', $currLi);
$next = $('.img' + outerArr[a][b], $currLi);
$currImg.fadeOut(1000);
$next.fadeIn(1000);
私はこれらのリンクの助けを借りてこれを解決しようとしました:
jQuery.map
Create multidimentional array with dynamic form
Pointy's code in this post .
いくつかのメモ: 私は"var outerArr = new Array();"
. 避けるべきだとどこかで読んだ(?)。可能であれば、.push と $.makeArray (および $.map) を使用して、これを jQuery の方法で実現したいと考えています。ただし、任意のアプローチが高く評価されます。
これが私が持っているコードです(私のコメントを見るためにJSfiddleのJavascriptウィンドウを増やしてください):(そしてここにも)
function fisherYates(myArray) {
var i = myArray.length, j, tempi, tempj;
if (i === 0) return false;
while (--i) {
j = Math.floor(Math.random() * (i + 1));
tempi = myArray[i];
tempj = myArray[j];
myArray[i] = tempj;
myArray[j] = tempi;
}
}
var outerArr = [];
var innerArr = [];
var fakeArr = 0;
var zz = 0;
for (var z = 1; z < 26; ++z) {
++zz;
if (zz != 5) {
fakeArr = fakeArr + z + ",";
} else {
fakeArr = fakeArr + z;
var realArr = $.makeArray(fakeArr);
innerArr.push(realArr);
outerArr.push(innerArr);
innerArr = [];
innerArr.length = 0;
fakeArr = "";
fakeArr.length = 0;
zz = 0;
}
}
// Shuffle/Randomize the numbers in each chunk but not the order of the five chunks
outerArr.forEach(fisherYates);
alert(outerArr);
問題は、配列から値を取得したいときです。単一の値が得られません (outerArr[1][3] のように 9 が表示されるはずです)。私はそれぞれの完全なチャンク (6,7,8,9,10 など) のみを取得します。$.map を使用する必要があると思いますが、私の例で $.map を使用する方法がわかりません。シャッフル/ランダム関数 (つまりouterArr.forEach(fisherYates);
) は、コードが現在のように機能しません。
配列もランダム化する必要があります(上部の最初のリンクで説明されているように)が、動的部分が機能すると、シャッフル/ランダムが機能するはずです。