我正試圖動態構建一個多維數組。構建動態多維數組
我想動態構建它的原因是數組增長爲5個數字塊中的1 - 1000。
這將是非常耗費時間把它寫這樣的:
[1, 2, 3, 4, 5],,,,,[996, 997, 998, 999, 1000]
我一直在掙扎今天一整天,所以我決定,因爲我現在完全陷入張貼了這個問題。
這就是我要動態地構建陣列(我先前的職位被解決):
Multi-dimensional array shuffle random
一旦動態數組被正確建立,我想調用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.淡入第一組的五個隨機圖片1-5
2.淡出第一設定
3.淡入第二組五個隨機圖片6-10
4.淡出第二設定
5.淡入第三組五張胡亂圖片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
尖尖的代碼this post。
一些注意事項:我不喜歡使用的"var outerArr = new Array();"
。我讀somwhere時應該避免(?)。我想用jQuery的方式完成這個工作,如果可能的話,用.push和$ .makeArray(和$ .map)。然而,任何方法表示讚賞。
下面是代碼我有(增加的jsfiddle JavaScript的窗口中看到我的意見):(也here)
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);
)無法正常工作,因爲代碼是現在。
數組也應隨機(如在頂部的第一個鏈接解釋),但我應該能夠獲得隨機播放/隨機的工作,一旦我得到的動態部分的工作。
'$ .makeArray(fakeArr)'是不是做你彷彿覺得它是。它期望一個對象作爲輸入,而不是一個字符串。 – nnnnnn
謝謝。好的,這解釋了它。我可能不得不看另一種方法,比如Michael Geary用Lo-Dash的建議。 – ironarrow