Checking any equal values inside an array

Discussion in 'Learning Javascript' started by Eliaquim, Jul 3, 2019.

Thread Status:
Not open for further replies.
    Tags:
  1. Eliaquim

    Eliaquim Raze: The Rakuen Zero's Guardian! Veteran

    Messages:
    615
    Likes Received:
    190
    Location:
    Brazil - Rio de Janeiro
    First Language:
    Portuguese - Br
    Primarily Uses:
    RMMV
    Hi people!

    Well, after I see a lot of things on the internet, I can't figure that out.
    I see some examples with .some() and with .every() but I can't manage to put it in my code and it works.

    In the code below, the variables a,b,c will get a random value between 0 and 3.
    So, if any of them are equal( a = b || a = c || b= c), then the code will make a random value again for each one of the variables. If not, the loop will break and the code will proceed.

    my code:
    Code:
    var a, b, c, habitat;
    
    function SetHabitat() {
    a = Math.floor(Math.random()*4);
    b = Math.floor(Math.random()*4);
    c = Math.floor(Math.random()*4);
    return;
    };
    
    
    for (var habitat = [a, b, c];; SetHabitat()) {
    if((a !== b) && (a !== c) && (c !== b)) {
    habitat = [a, b, c];
    break;
    }
    };
    
    console.log(habitat);
    How can I check if are any equal values inside an array?

    I manage to do that. But only when I specify the arrays.
    But, in case that will be a lot of arrays. How can I make it simple? Like putting in the "if(any arrays are equal == false)" { then i execute my code}

    Thanks!
     
    #1
  2. Jonforum

    Jonforum Veteran Veteran

    Messages:
    1,575
    Likes Received:
    1,344
    Location:
    Canada / Québec
    First Language:
    French
    Primarily Uses:
    RMMV
    PHP:
        var habitat = [];
        while(
    habitat.length 3){ // while will break when you will get 3 unique random data in array
            
    const = ~~(Math.random()*4);
            (
    habitat.indexOf(r) === -1) && habitat .push(r); // if not unique, add value
        
    }
     
    Last edited: Jul 3, 2019
    #2
    Eliaquim likes this.
  3. Eliaquim

    Eliaquim Raze: The Rakuen Zero's Guardian! Veteran

    Messages:
    615
    Likes Received:
    190
    Location:
    Brazil - Rio de Janeiro
    First Language:
    Portuguese - Br
    Primarily Uses:
    RMMV
    Thanks!
    But I cannot seem to understand, I think.
    With your code, I can substitute all of mine, right? Or I have to find out where I can put it?

    If I change the number in here, "habitat.length < 3", to 6 for example, this will generate more length to the array, right?

    Also, it gets "r is not defined"
    I try to define it with var or const but didn't work.
    [​IMG]

    what is the goal for "~~"? :aswt:
     
    #3
  4. Poryg

    Poryg Pixie of the Emvee kingdom, Ham of a Hamster Veteran

    Messages:
    3,785
    Likes Received:
    9,463
    Location:
    Czech Republic
    First Language:
    Czech
    Primarily Uses:
    RMMV
    ~~ is substitute od Math.floor.

    As for the r, he forgot a semicolon at the end of the line. In some JS interpreters they are important.
    Also, if const doesn't work, try var.
    Either way it looks like it should work.
     
    #4
    Eliaquim likes this.
  5. Jonforum

    Jonforum Veteran Veteran

    Messages:
    1,575
    Likes Received:
    1,344
    Location:
    Canada / Québec
    First Language:
    French
    Primarily Uses:
    RMMV
    yes the code will add 3 random unique numbers inside the variable habitat . (never same)

    Is you not use es6 change `const` by `var` sorry for this!

    It a short ways to do `Math.floor`
     
    #5
    Eliaquim likes this.
  6. Jonforum

    Jonforum Veteran Veteran

    Messages:
    1,575
    Likes Received:
    1,344
    Location:
    Canada / Québec
    First Language:
    French
    Primarily Uses:
    RMMV
    i also recommend you create a function or method
    PHP:
        /** Generate n random unic habitat */
        
    generateHabitat = function(max,range) {
            var 
    buffer = [];
            while(
    buffer.length max){ // while will break when you will get max unique random data in array
                
    var = ~~(Math.random()*range); // range between 0=>range
                
    (buffer.indexOf(r) === -1) && buffer .push(r); 
            }
            return 
    buffer;
        }



        var 
    habitat generateHabitat(6,30);
        
    console.log('habitat: 'habitat); // return a arrays with 6 random unic number range between 0=>30
     
    #6
    Eliaquim and dsiver144 like this.
  7. Eliaquim

    Eliaquim Raze: The Rakuen Zero's Guardian! Veteran

    Messages:
    615
    Likes Received:
    190
    Location:
    Brazil - Rio de Janeiro
    First Language:
    Portuguese - Br
    Primarily Uses:
    RMMV
    Hi!!
    I tested and it works!
    But took me a while to understand it ^^''
    The only things that I have doubt are this line:
    "(buffer.indexOf(r) === -1) && buffer .push(r);"

    why, indexOf(r) is equal to -1? What does that mean?
    buffer .push(r); > This is for add another object inside the array, right?
     
    #7
  8. Jonforum

    Jonforum Veteran Veteran

    Messages:
    1,575
    Likes Received:
    1,344
    Location:
    Canada / Québec
    First Language:
    French
    Primarily Uses:
    RMMV
    yes , don't worry this forum it for learn.
    indexOf return a index of the element founds in a arrays , but if found nothing, it return -1;
    you could also write `buffer.indexOf(r) < 0` it will work.
    so to translate this code line `(buffer.indexOf(r) === -1) && buffer .push(r);`
    it like `check if r existe in buffer, if not? (index-1)...continue loop ,
    if yes (index>-1) , add inside bufferArray r and continue loop`

    more info here
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
     
    #8
    Eliaquim likes this.
  9. Eliaquim

    Eliaquim Raze: The Rakuen Zero's Guardian! Veteran

    Messages:
    615
    Likes Received:
    190
    Location:
    Brazil - Rio de Janeiro
    First Language:
    Portuguese - Br
    Primarily Uses:
    RMMV
    OHHHH!!
    I get it now "indexOf return a index of the element founds in a arrays , but if found nothing, it return -1;"
    Thanks! I learn a lot from all this! ^^
     
    #9
    Jonforum likes this.
  10. mlogan

    mlogan Global Moderators Global Mod

    Messages:
    13,667
    Likes Received:
    7,536
    Location:
    Texas
    First Language:
    English
    Primarily Uses:
    RMMV

    This thread is being closed, due to being solved. If for some reason you would like this thread re-opened, please report this post and leave a message why. Thank you.

     
    #10
Thread Status:
Not open for further replies.

Share This Page