Checking any equal values inside an array

Status
Not open for further replies.

Eliaquim

Hakuen Studio
Veteran
Joined
May 22, 2018
Messages
1,695
Reaction score
1,113
First Language
Portuguese - Br
Primarily Uses
RMMZ
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!
 

Jonforum

Veteran
Veteran
Joined
Mar 28, 2016
Messages
1,623
Reaction score
1,439
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 r = ~~(Math.random()*4);
        (habitat.indexOf(r) === -1) && habitat .push(r); // if not unique, add value
    }
 
Last edited:

Eliaquim

Hakuen Studio
Veteran
Joined
May 22, 2018
Messages
1,695
Reaction score
1,113
First Language
Portuguese - Br
Primarily Uses
RMMZ
PHP:
    var habitat = [];
    while(habitat.length < 3){ // while will break when you will get 3 unique random data in array
        const r = ~~(Math.random()*4)
        (habitat.indexOf(r) === -1) && habitat .push(r); // if not unique, add value
    }
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.

what is the goal for "~~"? :aswt:
 

Poryg

Dark Lord of the Castle of Javascreeps
Veteran
Joined
Mar 23, 2017
Messages
4,125
Reaction score
10,639
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.
 

Jonforum

Veteran
Veteran
Joined
Mar 28, 2016
Messages
1,623
Reaction score
1,439
First Language
French
Primarily Uses
RMMV

Jonforum

Veteran
Veteran
Joined
Mar 28, 2016
Messages
1,623
Reaction score
1,439
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 r = ~~(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
 

Eliaquim

Hakuen Studio
Veteran
Joined
May 22, 2018
Messages
1,695
Reaction score
1,113
First Language
Portuguese - Br
Primarily Uses
RMMZ
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 r = ~~(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
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?
 

Jonforum

Veteran
Veteran
Joined
Mar 28, 2016
Messages
1,623
Reaction score
1,439
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
 

Eliaquim

Hakuen Studio
Veteran
Joined
May 22, 2018
Messages
1,695
Reaction score
1,113
First Language
Portuguese - Br
Primarily Uses
RMMZ
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
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! ^^
 

mlogan

Global Moderators
Global Mod
Joined
Mar 18, 2012
Messages
15,354
Reaction score
8,533
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.

 
Status
Not open for further replies.

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

Couple hours of work. Might use in my game as a secret find or something. Not sure. Fancy though no? :D
Holy stink, where have I been? Well, I started my temporary job this week. So less time to spend on game design... :(
Cartoonier cloud cover that better fits the art style, as well as (slightly) improved blending/fading... fading clouds when there are larger patterns is still somewhat abrupt for some reason.
Do you Find Tilesetting or Looking for Tilesets/Plugins more fun? Personally I like making my tileset for my Game (Cretaceous Park TM) xD
How many parameters is 'too many'??

Forum statistics

Threads
105,867
Messages
1,017,062
Members
137,575
Latest member
akekaphol101
Top