Home > other >  Get random value from array if it doesn't exist in another array
Get random value from array if it doesn't exist in another array

Time:02-17

I have two arrays and I want to get a random new value from Array1, if the value isn't included in Array2 already.

const array1 = ["Banana", "Orange", "Apple", "Mango"];
const array2 = ["Banana", "Mango"];

const randomElement = array1[Math.floor(Math.random() * array.length)];

I have already have a existing variable called randomElement, that finds a random element in Array 1 but it doesn't look at whether the element already exists in Array 2 or not.

Ideally the variable randomElement should only currently output either "Orange" or "Apple" since they are the ones missing in Array 2. How do I go on about this task the easiest?

CodePudding user response:

You need to compute the array having elements in array1 but not in array2 first, you can do this using Array#filter and Array#includes:

const array1 = ["Banana", "Orange", "Apple", "Mango"];
const array2 = ["Banana", "Mango"];

const array = array1.filter(e => !array2.includes(e));
const randomElement = array[Math.floor(Math.random() * array.length)];

console.log(randomElement);

CodePudding user response:

You can calculate the difference set (elements that are in array1 but not included in array2) between the two sets and use it to pick the next element:

const diff = array1.filter((v) => !array1.includes(v));
const randomElement = diff[Math.floor(Math.random() * array.length)];

console.log(randomElement);

CodePudding user response:

Your current implementation is just showing a random value from the array. One way to fix this is to wrap this inside a loop. Keep on getting the value and do not return until you find a value which is not in the array2. That could go on forever (in worst case scenario).

In another approach:

You will need a third array which will be a filtered version of your array1. Run all the operations on that and you should be good.

const array1 = ["Banana", "Orange", "Apple", "Mango"];
const array2 = ["Banana", "Mango"];
const filteredArr = array1.filter(x => !array2.includes(x));
const randomElement = filteredArr[Math.floor(Math.random() * filteredArr.length)];
console.log(randomElement);

Methods used : filter() - to filter array elements based on a condition.

includes() - to check if a value exists in an array

  • Related