2015-12-22 20 views
2

我有一个动态数组,其中一个样本看起来像如何选择3个独特的项目从一个动态数组

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个独特的项目他们到一个新的数组使用jQuery的纯JS?

我想这已经

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个独特的物品',但你的评论说你想要3个随机的,独特的物品。这是什么? – royhowie

回答

3
while (arr.length < 3) { 
    var randomIndex = Math.floor(Math.random()*nums.length); 
    if (arr.indexOf(nums[randomIndex]) === -1) { 
    arr.push(nums[randomIndex]) 
    } 
} 

在这里,我创建一个新的随机指数每次我们通过循环去的时间,然后检查是否是数字已经在我们的结果数组中。如果不是,我们会推入,否则我们就重新开始。

+0

Thatnks StackingKarma这是工作完美 – Behseini

+0

如果'nums'少于三个要素,或者如果它没有超过三个独特的元素? – royhowie

0

使用.forEachnums上并推动元件,如果它是唯一的数组。

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

+0

谢谢无效,但总是会回退'[25,12,23]' – Behseini

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); 
} 
相关问题