2015-12-22 24 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); 
} 
相關問題