javascript - 如何修复检查相同随机数组值的函数
问题描述
我正在学习 javascript,我已经能够创建一个具有参数的函数,该函数的任务是形成一个包含 1 个参数的 2 个字符 (0/1) 随机字符串的数组,并且返回值必须是一个数组。例子:
console.log (generateString(2));
样本结果:
['01', '11']
我面临的问题是即使它是一个随机字符串,但它仍然有可能具有相同的值。假设我运行程序代码
console.log (generateString(4));
结果之一是这样的:
['00', '00', '01', '10']
我的问题是如何确保数组的返回值没有重复值?这是我到目前为止的代码..
function generateString(num){
let newArray = [];
for(let i = 0; i < num; i++){
let randomChar = generateCharacters();
if(i >= 1 && (newArray[i - 1] === randomChar)){
randomChar = generateCharacters();
newArray.push(randomChar);
} else {
newArray.push(randomChar);
}
}
return newArray;
}
function generateCharacters(){
const chars = '01';
let result = '';
for (let j = 2; j > 0; --j){
result += chars[Math.floor(Math.random() * chars.length)];
}
return result;
}
console.log(generateString(4));
解决方案
您可以在do-while
内部使用 afor-loop
并继续制作新的随机字符串,直到生成的新字符串不包含在前一个数组中。
function generateString(num){
let newArray = [];
let randomChar;
for(let i = 0; i < num; i++){
do{
randomChar = generateCharacters();
}
while(newArray.includes(randomChar));
newArray.push(randomChar)
}
return newArray;
}
function generateCharacters(){
const chars = '01';
let result = '';
for (let j = 2; j > 0; --j){
result += chars[Math.floor(Math.random() * chars.length)];
}
return result;
}
console.log(generateString(4));
推荐阅读
- ios - 应用程序在设备上本地运行的 Xcode 11 去符号化崩溃日志
- firebase - 在 Vue.js 中加载节点库
- php - 在使用测试卡时在 php 中测试 payu 集成询问 otp
- c++ - 反转依赖于 end() 的迭代器
- c# - XUnit 测试返回一个列表是否被返回
- mysql - phpMyAdmin 似乎是用数百个新用户和文章填充我的新 vBulletin 论坛的最简单方法。我该怎么做?
- javascript - 旋转后将矩形保持在原位
- java - 如何从 Glide onResourceReady 返回
- python - 如何将莳萝字节对象发送到restful api
- webrtc - 带有 opentok.js 和 three.js 的 AR 远程协助 WebRTC