1

私は次のような配列を持っています

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

これらのエントリの乱数を順番に取得して、新しい配列に制限までプッシュしたいと考えています。

つまり、たとえば、(5) を入力した場合、次のような新しい配列へのランダムなエントリが並べ替えられます。

[1, 4, 7, 10, 12]

私は試した

var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
var newArr = [], num, roll;
//remove number from array
for(var i =0; i < arr.length; i++) {
num = Math.floor(Math.random() * arr.length);
newArr.push(arr[num]);
roll = arr.splice(num, 1);
}

しかし、注文を維持する必要があるため、必要なものは実際には返されません。それが役立つ場合、私はアンダースコアを使用していますか?

4

3 に答える 3

-1

ここを助けるために-おそらく上記の@Ericのリンクのようなことをするべきです

function getRandomSubarray(arr, size) {
    var shuffled = arr.slice(0), i = arr.length, min = i - size, temp, index;
    while (i-- > min) {
        index = Math.floor(i * Math.random());
        temp = shuffled[index];
        shuffled[index] = shuffled[i];
        shuffled[i] = temp;
    }
    return shuffled.slice(min);
}

var x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];

var newArr = getRandomSubarray(x, 6).sort(function(a,b) { return a - b } );

console.log(newArr)

それはあなたが探しているものを返すはずです。それは私の好みには大きすぎますが。使用するunderscore

function randomSort(a, n) {
    return _.take(_.shuffle(a), n).sort(function(a,b) { return a - b } );
}

console.log(randomSort(x, 6))
于 2013-06-23T00:49:55.197 に答える