我有一个动态数组,其样本看起来像
var nums=[25,12,23,47,55,116,17,80,92,150,191,142,13,124,15,176,187,18,19,20,21,30,31];
请告诉我如何从nums
中选择3个独特的项目并使用纯JS的jQuery将它们加载到新的数组中?
我已经尝试了这个
var arr = []
while(arr.length < 3){
var randomnumber=Math.ceil(Math.random()*nums.length)
var found=false;
for(var i=0;i<arr.length;i++){
if(arr[i]==randomnumber){found=true;break}
}
if(!found)arr[arr.length]=randomnumber;
}
但我没有得到我想要的东西
答案 0 :(得分:3)
while (arr.length < 3) {
var randomIndex = Math.floor(Math.random()*nums.length);
if (arr.indexOf(nums[randomIndex]) === -1) {
arr.push(nums[randomIndex])
}
}
这里我每次进行循环时都会创建一个新的随机索引,然后检查该数字是否已经存在于结果数组中。如果不是,我们将其推入,否则我们只是重新开始。
答案 1 :(得分:0)
在.forEach
上使用nums
并推送元素,如果它对数组是唯一的。
var nums=[25,12,23,47,55,116,17,80,92,150,191,142,13,124,15,176,187,18,19,20,21,30,31];
var arr = [];
nums.forEach(function(v){
if(arr.length==3) return;
if(arr.indexOf(v)==-1) arr.push(v);
});
alert(arr);
&#13;
答案 2 :(得分:0)
有一种简单的方法。首先从数组中选择一个随机数,然后将其拼接出数组。然后再次选择。这种方法保证它只会经历3次,而不是选择一个数字然后进行测试,当选择的数字接近要选择的数字时,这会导致更长的运行时间。
var tempArray = original
var arr = []
for(i=0; i<3; i++){
var n = Math.floor(Math.random()*tempArray.length); //ceil is dangerous, subtract 1 or use floor
arr[i] = tempArray[n];
tempArray.splice(n,1);
}