我正在尝试制作一些将采用现有数组并使用变量向其添加数字的JS。问题是,它没有返回期望值。在element[0][1] += rows
上,控制台返回了不应返回的值。例如,如果rows = 0;
和element[0][1] = 1;
控制台返回: 2 。我认为这与我的嵌套数组有关,就像当我运行简单的代码时一样:
let x = 1;
let g = [1,2,3];
g[0] += x;
console.log(g[0]);
一切正常,预期响应已重新设置,但不确定。 任何帮助将不胜感激,我简化了代码以提供帮助!
编辑2:
numberOfObjects
是整数,表示需要x和y位置的元素数量
var slides = [
[
[ [1,1],[3,1] ] //element 0 (start[x,y], end[x,y])
], // slide 0;
[
[ [1,1],[2,1] ], // element 0
[ [3,1],[3,1] ] //element 1
], //slide 1
[
[ [1,1],[2,1] ], // element 0
[ [3,1],[3,2] ], // element 1
[ [1,2],[2,2] ] // element 2
], //slide 2
[
[ [1,1],[1,1] ], // element 0
[ [1,2],[1,3] ], // element 1
[ [1,2],[2,3] ], // element 2
[ [3,2],[3,3] ] // element 3
], //slide 3
[
[ [1,1],[1,2] ], // element 0
[ [2,1],[2,2] ], // element 1
[ [3,1],[3,2] ], // element 2
[ [1,3],[1,3] ], // element 3
[ [2,3],[3,3] ] // element 4
], //slide 4
[
[ [1,1],[1,1] ], // element 0
[ [2,1],[2,1] ], // element 1
[ [3,1],[3,2] ], // element 2
[ [1,2],[2,2] ], // element 3
[ [1,3],[1,3] ], // element 4
[ [2,3],[3,3] ] // element 5
] //slide 5
]
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function collectSlides(numberOfObjects){
//const N = numberOfObjects;
var rows = 0;
console.log("At row:"+rows);
while (numberOfObjects > 0){
if (numberOfObjects < 7){
console.log("finished");
numberOfObjects == 0;
}
else{
let x = getRandomInt(6);
let slide = slides[x];
slide.forEach(element => {
//console.log("org:"+element[0][1]);
element[0][1] = rows;
//console.log("aft:"+element[0][1]);
});
rows += (slide[slide.length-1][1][1] - rows);
console.log(slide);
numberOfObjects -= x;
}
}
}
编辑更多信息:
为简化起见,使用控制台调用了函数,但通常在页面加载事件中调用了函数。
预期结果,从函数返回的数组为我提供了生成的元素列表(上面列出的东西类似于2个元组),并带有更新的y坐标。
为什么?我计划使用css-grid制作一个页面,其中每个元素将跨越js给定的选定行和列。
here is an image of what each slide will do.
collectSlides()
函数的目标是从一张幻灯片中随机选取,然后将其添加到具有适当y坐标的retun数组中。
编辑2:将const N
注释掉,因为它无关紧要
edit 3:为了重复结果,我使用this code中的Math.seedrandom("3232");
,首先在HTML中插入带有脚本标签的seedrandom.min.js
。我使用collectSlides(22)
在控制台中调用该函数,并且当输出的第一个响应是(5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
上的witch下的element[0]
时,您会发现0: (2) [1, 1] 1: (2) [1, 2]
。给定代码0:(2)[1, 1 ](粗体数字)应为 0而不是1 。
答案 0 :(得分:0)
问题是试图更改经过精心设计的数组中的数字。我不知道为什么它不起作用,但我对其进行了编码,以避免编辑现有数组的数字,并且现在可以使用。
const SEED = "3232";
const USESEED = true;
var slides = [
[
[ [1,1],[3,1] ] //element 0 (start[x,y], end[x,y])
], // slide 0;
[
[ [1,1],[2,1] ], // element 0
[ [3,1],[3,1] ] //element 1
], //slide 1
[
[ [1,1],[2,1] ], // element 0
[ [3,1],[3,2] ], // element 1
[ [1,2],[2,2] ] // element 2
], //slide 2
[
[ [1,1],[1,1] ], // element 0
[ [1,2],[1,3] ], // element 1
[ [1,2],[2,3] ], // element 2
[ [3,2],[3,3] ] // element 3
], //slide 3
[
[ [1,1],[1,2] ], // element 0
[ [2,1],[2,2] ], // element 1
[ [3,1],[3,2] ], // element 2
[ [1,3],[1,3] ], // element 3
[ [2,3],[3,3] ] // element 4
], //slide 4
[
[ [1,1],[1,1] ], // element 0
[ [2,1],[2,1] ], // element 1
[ [3,1],[3,2] ], // element 2
[ [1,2],[2,2] ], // element 3
[ [1,3],[1,3] ], // element 4
[ [2,3],[3,3] ] // element 5
] //slide 5
]
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function collectSlides(numberOfObjects){
if (USESEED){
try{
Math.seedrandom(SEED);
}
catch{
alert(" this script requires seeded math.random functions from [https://github.com/davidbau/seedrandom] in order to create a replicable pattern. to disable this warning set USESEED = False");
}
}
var rows = 0;
elements = [];
while (numberOfObjects > 0){
if (numberOfObjects < slides.length+1){
slides[numberOfObjects].forEach(element => {
let slide = [];
let q1 = [element[0][0],(element[0][1]+rows)];
let q2 = [element[1][0],(element[1][1]+rows)];
slide.push(q1,q2);
elements.push(slide);
});
rows = elements[elements.length-1][1][1]
numberOfObjects -= numberOfObjects;
}
else{
let x = getRandomInt(6);
slides[x].forEach(element => {
let slide = [];
let q1 = [element[0][0],(element[0][1]+rows)];
let q2 = [element[1][0],(element[1][1]+rows)];
slide.push(q1,q2);
console.log(slide)
elements.push(slide);
});
rows = elements[elements.length-1][1][1]
numberOfObjects -= x;
}
}
return elements;
}