1

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?

3 Answers 3

1

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);

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you so much, this works perfectly! I really appreciate it!!
0

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);

1 Comment

Thank you so much for the help, this is great!! I appreciate it :)!
0

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

2 Comments

Thank you so much, this made a lot of sense when you explained it like this! I really appreciate it!
Sure. Please upvote/accept this answer if it helped you :D

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.