如何从同一数组中获取不重复随机值分别赋值给thing1和thing2?
解决从数组中选取不重复随机值的问题
你的代码存在几个关键问题导致无法实现需求:
- 嵌套函数
diffRand的逻辑完全错误:while循环条件写反,且错误使用this.thing2(此时thing2未定义,嵌套函数的this指向也不符合预期) diffRand内的return语句直接放在循环块中,导致循环未执行就返回随机值,完全没起到去重作用- 存在语法错误:
diffRand函数未正确闭合括号,thing2定义在diffRand内部,外部无法访问
下面提供两种可靠的实现方案:
方案一:循环生成直到拿到不同值
适合数组元素较少的场景,逻辑直观:
const array = ["item1", "item 2", "item 3", "item 4"]; // 通用随机取值工具函数 const getRandomItem = arr => arr[Math.floor(Math.random() * arr.length)]; const getUniquePair = () => { const thing1 = getRandomItem(array); let thing2; // 循环生成,直到拿到与thing1不同的值 do { thing2 = getRandomItem(array); } while (thing2 === thing1); return { thing1, thing2 }; };
方案二:过滤数组后随机选取(更高效)
如果数组元素较多,循环重试可能浪费性能,可先过滤已选元素再随机选取:
const array = ["item1", "item 2", "item 3", "item 4"]; const getRandomItem = arr => arr[Math.floor(Math.random() * arr.length)]; const getUniquePair = () => { const thing1 = getRandomItem(array); // 过滤掉已选中的thing1,得到剩余可选元素 const remainingItems = array.filter(item => item !== thing1); // 从剩余元素中随机选取 const thing2 = getRandomItem(remainingItems); return { thing1, thing2 }; };
内容的提问来源于stack exchange,提问作者Mitch A
相关产品推荐
相关产品推荐

