2017-03-11 19 views
2

buttonclickedであるたびに、arrayが25個のイメージ/ピンをレンダリングし、arrayの最初の25個だけをレンダリングしています。私は一度に25ピンをレンダリングしたいが、がクリックされるたびにそれらをrandomにしたい。配列内のオブジェクトをランダム化する

ここでは以前に設定した回答の一部を使用することを提案しましたが、それを適用する方法や自分の持つ意味を理解することはできません。

randomIndex = Math.floor(Math.random() * currentIndex); 

そして、私が欲しいarrayプラス.LENGTHと現在のインデックスを置き換える:

これは、私が使用するように言われたものです。

var pinIdArray = ["448460075380400214", "554857616577037440", "129619295506364205"]; \t \t \t \t \t 
 
var boardIdArray = []; 
 
var showPins = []; 
 
     
 
function(){ 
 
    res.render("suggested", {pins: showPins});

答えて

1

あなたは、配列をシャッフルして、配列の最初の25個の要素を取るためにDurstenfeld shuffleを使用することができます。

function shuffleArray(array) { 
 
    for (var i = array.length - 1; i > 0; i--) { 
 
    var j = Math.floor(Math.random() * (i + 1)); 
 
    var temp = array[i]; 
 
    array[i] = array[j]; 
 
    array[j] = temp; 
 
    } 
 
    return array; 
 
} 
 

 
var array = []; 
 
for(var i = 0; i < 500; i ++) { 
 
    array[i] = i; 
 
} 
 
console.log(shuffleArray(array).slice(0, 25));

0

あなたはLodash's _.shuffle機能を使用して、配列内の値をシャッフル/ランダム化することができます。 Lodash _.shuffle関数は、Fisher-Yates shuffleのバージョンを使用します。ここで

var array = [1, 2, 3, 4]; 
 
var result = _.shuffle(array) 
 
console.log(result);
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

1

任意のライブラリをせずにJavaScriptで実現される機能です。これにより、配列のシャッフルを避けることができます。

let pinIdArray = ["448460075380400214", "554857616577037440", "129619295506364205", "3403722138", "8005795986", "7717201977", "6689430878", "7705363504", "3827905985", "9133621064", "9162201846", "2655432017", "0197893312", "7220269979", "3218703261", "3478813716", "7445481990", "9806757977", "9357022147", "3492330721", "3504169963", "9259212333", "6574699545", "9727263383", "0016479256", "1624997250", "2083975447", "5683391989", "3466001901", "4660933902", "5216511997", "8820216343", "8583764035", "4563326839", "5201961267", "3429608185", "5007846054", "7437408815", "3472117054", "1545827364", "3152159572", "7913372317", "2550237417"]; 
 

 
function getRandomSubset(array, setSize) { 
 
    let maxValue = array.length, tmpSet = new Set(), randomIndices; 
 
    if (maxValue <= setSize) { 
 
    randomIndices = [...Array(setSize).keys()]; 
 
    } else { 
 
    while (tmpSet.size < setSize) { 
 
     tmpSet.add(Math.floor(Math.random() * maxValue)); 
 
    } 
 
    randomIndices = Array.from(tmpSet) 
 
    } 
 
    return randomIndices.map(index => array[index]); 
 
} 
 

 
//function(){ 
 
// res.render("suggested", {pins: getRandomSubset(pinIdArray, 25)}); 
 

 
// Test 
 
console.log("25 Random Elements:", getRandomSubset(pinIdArray, 25));

関連する問題