【问题标题】:Random item from array with no repeat using javascript?使用javascript不重复的数组中的随机项?
【发布时间】:2021-09-25 16:42:32
【问题描述】:

如何从不重复的数组中获取随机项?

我有一个元素数组,比如

var a = ["Mango", "Orange", "Banana", "Apple", "Grapes", "Berry", "Peach"]

我想从数组a中随机获取3个项目

var random = ["Banana", "Berry", "Peach"]

【问题讨论】:

标签: javascript


【解决方案1】:

var a = ["Mango","Orange","Banana","Apple","Grapes","Berry","Peach"];

function searchRandom(count, arr){
  let answer = [], counter = 0;
 
  while(counter < count){
    let rand = arr[Math.floor(Math.random() * arr.length)];
    if(!answer.some(an => an === rand)){
      answer.push(rand);
      counter++;
    }
  }
  
  return answer;
}

console.log(searchRandom(3,a))

灵活地支持您想要的任何count 并确保唯一性

【讨论】:

    【解决方案2】:

    var a = ["Mango","Orange","Banana","Apple","Grapes","Berry","Peach"]
    var res = a.sort(function() {
      return 0.5 - Math.random();
    });
    console.log(res.slice(a,3))

    【讨论】:

    • 小心,.sort 对数组就地进行排序,修改原来的。如果您不希望有任何副作用,您应该制作一份副本并对其进行排序。
    【解决方案3】:

    这应该没有任何重复:

    const a = ["Mango","Orange","Banana","Apple","Grapes","Berry","Peach"]
    const b = a.slice()
    const newArr = [];
    
    for(let i= 0; i<3; i++){
     let arr = b[Math.floor(Math.random()*b.length)];
      
     let index = b.indexOf(arr);
      
      b.splice(index, 1 );
      
      newArr.push(arr)
      
    }
    
    console.log(newArr)

    【讨论】:

      【解决方案4】:

      试试这个:-

      var a = ["Mango","Orange","Banana","Apple","Grapes","Berry","Peach"]
      b = _.shuffle(a).slice(0,5);
      console.log(b);
      

      【讨论】:

        【解决方案5】:

        我想改进 Willem van der Veen 的答案,因为他的代码可能返回未定义。这是因为arrayClone取出了随机项但随机数仍在前一个索引长度的范围内。因此,解决方案是我们也必须减少 arrayClone 的长度:

            const array = [0, 1 ,2 ,3 ,4, 5, 6, 7, 8 , 9]
        
            const arrayClone = array.slice()
        
            let arrayLength = array.length
        
            let newArray = []
        
            for (  let i = 0; i < 5; i++) {
                let arr = arrayClone[Math.floor(Math.random() * arrayLength)]
        
                arrayLength--
        
                let index = arrayClone.indexOf(arr)
        
                arrayClone.splice(index, 1)
        
                newArray.push(arr)
             }
        
        
              console.log(newArray)

        【讨论】:

        • 好的答案,我们可以这样改进一点; const array = [0, 1 ,2 ,3 ,4, 5, 6, 7, 8 , 9] const arrayClone = array.slice();让 arrayLength = array.length;让 newArray = []; for ( let i = 0; i
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 2011-08-20
        • 2014-04-25
        • 2021-10-08
        相关资源
        最近更新 更多