javascript - Javascript - 如何修复函数以检查相同的随机数组值

例如:


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));
时间:

只需在添加新字符串之前检查重复项。


function generateString(num){



 let newArray = [];


                let i =0;


 while(i<num){


 console.log(newArray)


 let randomChar = generateCharacters();


 if(newArray.indexOf(randomChar)<=-1){



 newArray.push(randomChar);


                                 i+=1;


 }



 }


 return newArray;


 }

你可以随机抽取所有4对数字的数组:


function shuffle(a) {


 for (let i = a.length - 1; i > 0; i--) {


 let j = Math.floor(Math.random() * (i + 1));


 let temp = a[i];


 a[i] = a[j];


 a[j] = temp;


 }


 return a;


}



function generateString(num){


 let all = ["00","01","10","11"];


 shuffle(all);


 return all.slice(0, num); // Only take the number of elements requested


}



console.log(generateString(4));

generateString函数中进行了更改,你可以使用set来不更新结果中的重复项。我认为你需要更新generateCharacters函数以正确生成所有可能的字符串。


function generateString(num){


 let newArraySet = new Set();



 for(let i = 0; i < num; i++){


 let randomChar = generateCharacters();


                while(newArraySet.has(randomChar)) {


                        randomChar = generateCharacters();


                }


                newArraySet.add(randomChar);


 }


 return Array.from(newArraySet);


}



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

在构建数组时,需要检查数组中是否还不能在数组中添加该数组,如果你提供问题的数组和你需要检查的"随意"项,则此函数为return true 。


function isInArray(myArray, arrayItemToCheck)


{


 var found = myArray.find(function(arrayItem) {


 return arrayItem == arrayItemToCheck;


 });


 return !!found


}



在你的函数中,更改行 let randomChar = generateCharacters(); 到:


let randomChar;


// loops forever until condition is met


while (true) {


 randomChar = generateCharacters();


 if (!isInArray(newArray, randomChar)) { 


 break;


 } 


}




...