首页 > 解决方案 > Javascript | Generate number

问题描述

I'm About writing a JavaScript code that generate an array allColumns contain a specific number of others arrays,

the inside arrays contain a specific numbers of INT selected randomly;

The problem

This Code generate duplicated arrays , i don't know why! any help ?

function randomNumberFromRange(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}


get_random = function (list) {
    return list[Math.floor((Math.random() * list.length))];
}



function getSum(total, num) {
    return total + num;
}
let columnLenght = 3;
    let i = 0;
    let j = 0;
    let tableColumns = 3;
    let allColumns = [];
    let prevNumber = [];

    let prevResult = 0;

    while (j < tableColumns) {
        while (i < columnLenght) {

            if (prevNumber === undefined || prevNumber.length == 0) {
                let randomNumber = get_random([1, 2, 3, 4], i);
                $('.testcontent').append('<h6 class="row">' + randomNumber + '</h6>');
                prevNumber.push(randomNumber);

            } else {

                prevResult = prevNumber.reduce(getSum);
                if (prevResult == 0) {
                    let randomNumber = get_random([0, 1, 2, 3, 4]);
                    $('.testcontent').append('<h6 class="row">' + randomNumber + '</h6>');
                    prevNumber.push(randomNumber);

                }
                if (prevResult == 1) {
                    let randomNumber = get_random([-1, 0, 1, 2, 3]);
                    $('.testcontent').append('<h6 class="row">' + randomNumber + '</h6>');
                    prevNumber.push(randomNumber);

                }
                if (prevResult == 2) {
                    let randomNumber = get_random([-2, -1, 0, 1, 2]);
                    $('.testcontent').append('<h6 class="row">' + randomNumber + '</h6>');
                    prevNumber.push(randomNumber);

                }
                if (prevResult == 3) {
                    let randomNumber = get_random([-3, -2, -1, 0, 1]);
                    $('.testcontent').append('<h6 class="row">' + randomNumber + '</h6>');
                    prevNumber.push(randomNumber);

                }
                if (prevResult == 4) {
                    let randomNumber = get_random([-4, -3, -2, -1, 0]);
                    $('.testcontent').append('<h6 class="row">' + randomNumber + '</h6>');
                    prevNumber.push(randomNumber);

                }
            }
            i++;

        }
        console.log(prevNumber);
        allColumns.push(prevNumber);
        j++;
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

标签: javascript

解决方案


因为您不会在每个新行上重置数组。您继续添加到同一个数组并继续将其附加到另一个数组。因此,当您开始一行循环时,请创建一个新数组以推入。

while (j < tableColumns) {
  let prevNumber = []; // redefine your array on each row
  let i = 0  // reset i
  while (i < columnLength) { // <-- spelling error
    /* code */
  }
  allColumns.push(prevNumber);
  j++;
}

不知道你为什么不使用 for 循环

for (let j=0; j < tableColumns; j++) {
  const prevNumber = []
  for (let i=0; i < columnLength; i++) {
    /* code */
  }
  allColumns.push(prevNumber);
}

推荐阅读