如何从动态数组中选择3个唯一项

时间:2015-12-22 00:19:45

标签: javascript jquery

我有一个动态数组,其样本看起来像

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

但我没有得到我想要的东西

3 个答案:

答案 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并推送元素,如果它对数组是唯一的。

&#13;
&#13;
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;
&#13;
&#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);
}