vendredi 1 mai 2020

Too much recursion on a random number checker js

// It gets the first 5 sites that are already on the page and puts them inside sitesOnPage
if (sitesOnPage[0] === undefined) {
    var h2s= document.querySelectorAll("h2");
    var site= infiniteResponse[0].children[section].children;

    for (var i=0; i < h2s.length; i++) { 

        if (h2s[i].innerHTML === site[i].textContent.replace(/["]/g, "'").split(", ")[0].replace(/[']/g, "")) sitesOnPage.push(i);

    }
}


function randomSiteInfosF(section, siteN) {

    // Checks if it's a number and not a string or something else
    if (typeof siteN !== "number") return;
    if (typeof section !== "number") return;


    siteChecker_RNG(section, siteN)


    // Infos about the site: desc, img, title
    //                  section  \/              the site infos              \/                   
    eval(`siteInfo${siteN}= infiniteResponse[0].children[${section}].children[${eval(`randomSite${siteN}`)}].textContent.replace(/["]/g, "'").split(", ")`);
    eval(`siteTitle${siteN}= siteInfo${siteN}[0].replace(/[']/g, "")`);
    eval(`siteDesc${siteN}= siteInfo${siteN}[1]`);
    eval(`siteImg${siteN}= siteInfo${siteN}[2].replace(/[']/g, "")`);
    eval(`siteURL${siteN}= siteInfo${siteN}[3]`);

}


function siteChecker_RNG(section, siteN) {

    // Checks if it's a number and not a string or something else
    if (typeof siteN !== "number") return;
    if (typeof section !== "number") return;

    //                          section  \/       how many sites \/  
    var sitesAvailable= infiniteResponse[0].children[section].children.length;
    var h2s= document.querySelectorAll("h2");
    var randomSiteN= Math.floor(Math.random() * sitesAvailable);

    //  Return if all sites are loaded
    if (h2s.length === sitesAvailable) return;

    // Checks if the random number is a correct one
    for (var i= 0; i < sitesOnPage.length; i++) {

        if (randomSiteN === sitesOnPage[i]) {

            siteChecker_RNG(section, siteN)

        } else continue;

    }

    eval(`randomSite${siteN}= randomSiteN`);

}


var howManySitesPerLoad= 3;


for (let i= 0; i < howManySitesPerLoad; i++) {
    randomSiteInfosF(section, i);
}

Basically i'm trying to check if the number generated is correct or not, when it gets called, it creates an infinite loop that is a recursion if i understood right.

"sitesOnPage" is an array that over time it gets filled with numbers (empty at start).

I know that eval shouldn't be used often and such. Tips to find another way around it are appreciated being that i don't use it often myself.

I'm using a database to get all the data to compare with the numbers.

This is part of code that is used for my site in its sections, http://www.coolwebsites.ml/




Aucun commentaire:

Enregistrer un commentaire