Js Неправильное добавление чисел - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь создать 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]);

Все работает хорошо, и ожидаемый ответ сохраняется, но я не уверен. Любая помощь будет принята с благодарностью, и я упростил свой код, чтобы помочь!

edit 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. вот изображение того, что будет делать каждый слайд. цель функции collectSlides() состоит в том, чтобы случайным образом выбрать один из слайдов и добавить его в массив retun с соответствующими координатами y.

редактировать 2: закомментировано const N, потому что это не актуально

редактировать 3: для повторения результатов я использую Math.seedrandom("3232"); из этот код я сначала вставляю seedrandom.min.js с тегом сценария в html. Я вызываю функцию в консоли с помощью collectSlides(22), и когда первый ответ на выходе будет (5) [Array(2), Array(2), Array(2), Array(2), Array(2)] под именем element[0], вы найдете 0: (2) [1, 1] 1: (2) [1, 2]. с кодом 0: (2) [1, 1 ] (выделенное жирным шрифтом число) должно быть 0, а не 1 .

1 Ответ

0 голосов
/ 11 июля 2020

Проблема заключалась в попытке изменить числа в ранее созданном массиве. Я не знаю, почему это не сработало, но я перекодировал его, чтобы не редактировать номера существующего массива, и теперь он работает.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...