1
var arr = ['1','2','3','4'];

如何从中挑选 3 个独特的数组arr

我只能一一挑选喜欢..

function pick(a){
    var i = Math.floor(Math.random()*a.length);
    return a[i];
}

选择的数组不会重复。

我不知道该怎么做......非常感谢:D

游乐场:http: //jsbin.com/ocuhig/1/edit

4

3 回答 3

2

一种可能的解决方案:

var copy = arr.slice();
while (copy.length > 3) {
    copy.splice(~~(Math.random() * copy.length), 1);
}

还有更可爱的解决方案:

var copy = arr.slice().sort(function() {
    return Math.random() - 0.5;
}).slice(0, 3);
于 2013-05-07T13:35:28.667 回答
1
/**
 * Returns a random integer between min and max
 */
function getRandomInt (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
于 2013-05-07T13:37:01.033 回答
1

另一种可能的解决方案:

var picker = function(a, picked) {
    if ( !picked ) picked = [];
    var randomNumber = Math.floor(Math.random()*a.length);
    if ( picked.indexOf(a[randomNumber]) === -1 ) picked.push(a[randomNumber]);
    if ( picked.length < 3 ) 
       return picker(a, picked);
    else
       return picked;
}

游乐场:http: //jsbin.com/owevuh/1/

于 2013-05-07T13:37:22.913 回答