我正在尝试动态构建一个多维数组。
我想动态构建它的原因是如果数组增长到像 1 - 1000 的 5 个数字块。
像这样写它会非常耗时:
[1, 2, 3, 4, 5],,,,,[996, 997, 998, 999, 1000]
我今天整天都在挣扎,所以我决定发布这个问题,因为我现在完全陷入困境。
这是我要动态构建的数组(我之前的帖子已解决):
Multi-dimensional array shuffle random
一旦正确构建了动态数组,我想用'outerArr.forEach(fisherYates)调用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
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。shuffle/random 函数(即outerArr.forEach(fisherYates);
)也不能像现在的代码那样工作。
该数组也应该是随机的(如顶部第一个链接中所述),但是一旦我让动态部分工作,我应该能够让随机播放/随机工作。