我有1到10的随机数和1到10的数组,但缺少8和2.我希望JS能够解决这个问题并将8或2推入数组。 使用Javascript:
var arr = [1, 3, 5, 6, 9, 4, 7, 10];
var num = Math.floor((Math.random() * 10) + 1);
for (i = 0; i < arr.length; i++) {
while (num == arr[i]) {
num = Math.floor((Math.random() * 10) + 1);
}
arr.push(num);
不幸的是,它确实创建了一个新数字,但与先前的比较数字重复。请帮忙。
答案 0 :(得分:3)
您可以在该数组中查找缺少的数字并随机选择一个元素:
var arr = [1, 3, 5, 6, 9, 4, 7, 10];
// Build array of missing numbers
var missingNumbers = [];
for (var i = 1; i <= 10; i++) {
if (arr.indexOf(i) < 0) {
missingNumbers.push(i);
}
}
// Pick one of them at random
var randomNumber = missingNumbers[Math.floor(Math.random() * missingNumbers.length)];
// Push it into the array
arr.push(randomNumber);
// Show results
console.log(randomNumber);
console.log(arr);
&#13;
.as-console-wrapper {
max-height: 100% !important;
}
&#13;
答案 1 :(得分:0)
你也可以试试这个
var arr =[1,3,5,6,9,4,7,10];
var num=parseInt((Math.random()*10)+1)
while(arr.indexOf(num)!=-1){
num=parseInt((Math.random()*10)+1);
}
arr.push(num)
console.log(arr)
&#13;
在上面的示例中,我随机取一个数字并检查循环,该数字是否存在于数组中
while(arr.indexOf(num)!=-1)
如果数字不存在那么再次在内部循环中我再次生成一个数字并检查。当我得到一个不存在的数字时,循环体将不会被执行,我在数组中推送该数字。
正如你所说,你只想要一个数字 8或2
答案 2 :(得分:0)
我明白了。
var arr = [1, 3, 5, 6, 9, 4, 7, 10];
var num = Math.floor((Math.random() * 10) + 1);
for (i = 0; i < arr.length; i++) {
while (num == arr[i]) {
num = Math.floor((Math.random() * 10) + 1); }
arr.push(num);}
基本上如果它是重复的,我只需将i = 0再次循环,直到它是唯一的。它可能效率不高。
答案 3 :(得分:0)
函数查找返回一个数组,其中填充了所有重复的数字。经过优化
function find(a, b) {
let result = [];
for(let i=0; i<a.length; i++) {
let num = NumbersList[i];
if(b[num] == 0) {
b[num] = 1;
} else if (b[num] == 1) {
b[num] = 2;
result.push(num);
}
}
console.log("Duplicated numbers: " +result.length);
return result;
}
var NumbersList = new Array();
var value = 30000;
for(let i=0; i<value; i++) {
let x = Math.floor((Math.random() * value) + 1);
NumbersList.push(x);
}
var map = new Array(NumbersList.length).fill(0);
var t0 = performance.now();
find(NumbersList, map);
var t1 = performance.now();
console.log("Call to find with " +value+ " numbers took " + (t1 - t0) + " milliseconds.");