如果另一个数组中不存在,则从数组中获取随机值

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

我有两个数组,我想从 Array1 中获取一个随机的新值,如果该值尚未包含在 Array2 中。

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

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

我已经有一个名为 randomElement 的现有变量,它会在数组 1 中找到一个随机元素,但它不会查看该元素是否已存在于数组 2 中。

理想情况下,变量 randomElement 目前应该只输出“Orange”或“Apple”,因为它们是 Array 2 中缺少的。我如何最简单地完成这项任务?

您需要首先计算包含 array1 中但不包含 array2 中元素的数组,您可以使用 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);

您可以计算两组之间的差异集(array1 中但不包含在 array2 中的元素)并使用它来选择下一个元素:

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

console.log(randomElement);

您当前的实现只是显示数组中的一个随机值。解决此问题的一种方法是将其包装在一个循环中。继续获取值,不要 return,直到找到不在 array2 中的值。这可能永远持续下去(在最坏的情况下)。

另一种方法:

您将需要第三个数组,它将是 array1 的过滤版本。 运行 上面的所有操作,你应该没问题。

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

使用的方法:filter() - 根据条件过滤数组元素。

includes() - 检查数组中是否存在值