目前,如果三排隨機選擇它會輸出一個條目(你的對象),這樣一個數組:
[[object Object] {
e: "ee",
g: "gg",
h: "hh"
}]
我們可以只使用數組和費雪耶茨功能,可以發現這裏:https://github.com/coolaj86/knuth-shuffle
這應該給我們一個隨機數組的值。
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex ;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
如果您需要的值相關的按鍵,只需使用對象的數組。我們可以使用數組中的對象的索引,而不是使用「one」,「two」,「three」等來標識每個集合。例如:
var list = [
{"a" : "aa", "b": "bb", "c" : "cc"},
{"d" : "dd", "e": "ee", "f" : "ff"},
{"g" : "gg", "e": "hh", "i" : "ii"},
];
然後,我們會:
shuffle(list);
console.log(list[0]);
這應該給我們對象的隨機排列。每次運行時它會隨機獲得一個對象:
[object Object] {
e: "hh",
g: "gg",
i: "ii"
}
[object Object] {
e: "hh",
g: "gg",
i: "ii"
}
[object Object] {
a: "aa",
b: "bb",
c: "cc"
}
只要抓住數組中的第一項洗牌吧,list[0]
後使用for-in循環來獲取值:
var randomResult = list[0];
for (key in randomResult){
console.log(randomResult[key];
}
如果不需要與價值,即相關的關鍵,「一」與「AA」,而你只是想從你的價值觀隨機選擇,你可以使用一個rray和Fisher-Yates(又名Knuth)Shuffle功能。
例如:
var list = ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg']
我們可以將其應用到陣列
shuffle(list)
,我們會得到具有相同的值(不重複),是隨機的,可以是一個數組迭代。
["cc", "ee", "bb", "gg", "aa", "ff", "dd"]
如果您需要值組合在一起,但你並不需要的按鍵,也就是說,你需要「AA」,「BB」,「CC」總是被一起返回,你可以使用一個數組陣列和一個多維數組。
var list = [['aa', 'bb', 'cc'], ['dd', 'ee', 'ff'], ['gg', 'hh', 'ii']];
如果我們有一點點額外的代碼一起運行的排序功能,我們可以得到三個值
function sortedMulti(array){
sorted(array);
return array[0]
};
有了這個我們會在每次獲得一個隨機集。
["dd", "ee", "ff"]
["aa", "bb", "cc"]
["dd", "ee", "ff"]
["dd", "ee", "ff"]
["dd", "ee", "ff"]
["dd", "ee", "ff"]
["aa", "bb", "cc"]
["dd", "ee", "ff"]
["aa", "bb", "cc"]
["dd", "ee", "ff"]
["gg", "hh", "ii"]
["gg", "hh", "ii"]
這會使數組隨機化,這意味着您將在主數組的索引0處隨機設置一個數組。然後你可以返回它(像我一樣),或者用for循環遍歷數組中的項來獲取每個值。
其實我需要的價值,我試圖做相關的關鍵,是建立嵌套的數組,即具有列表的obj裏面有五名陣列。隨機輸出嵌套數組,例如,輸出第一行/嵌套數組,像這樣;一:a - > aa,b - > bb,c - > cc。 – jQueryster 2014-12-11 04:14:55
即,我想隨機輸出一個數組的值,這就像一個問題的三個提示,所以,用戶將不得不輸入答案,然後比較值,看看它是否匹配。我會如何做到這一點? – jQueryster 2014-12-11 04:29:08
我不明白爲什麼你需要使用數組作爲輸出,只需使用嵌套在數組中的對象。如果密鑰(「一個」,「兩個」,「三個」等)只是一個隨機選擇的選項,那麼使用密鑰/值方案無法獲得任何結果。你可以像上面發佈的那樣使用數組的索引。 – Aweary 2014-12-11 04:34:02