如何從關聯數組中選擇與數組長度有關的隨機數組元素?從關聯數組中選取一個隨機數組元素
例如:
actors[name]=firstname
movielist[title]=[director,artwork,actors]
如果我想拿出一個單一的隨機數組元素,並從它的所有信息它,然後我將如何實現這一目標?
如何從關聯數組中選擇與數組長度有關的隨機數組元素?從關聯數組中選取一個隨機數組元素
例如:
actors[name]=firstname
movielist[title]=[director,artwork,actors]
如果我想拿出一個單一的隨機數組元素,並從它的所有信息它,然後我將如何實現這一目標?
由「關聯數組」假設你的意思JavaScript對象(其具有零個或多個鍵/值屬性)時,可以執行類似的下面,其中隨機選擇的屬性,並返回它的名字:
function getRandomObjectPropertyName(obj) {
var a = [],
k;
for (k in obj)
if (obj.hasOwnProperty(k)
a.push(k);
if (a.length === 0)
return null; // or whatever default return you want for an empty object
return a[Math.floor(Math.random() * a.length)];
// or to return the actual value associated with the key:
return obj[ a[Math.floor(Math.random() * a.length)] ];
}
如果不清楚上述工作方式,它會將對象中的所有鍵名複製到數組中。使用.hasOwnProperty()
(可以說)是可選的,具體取決於您的需求。由於該數組具有長度和數字索引的項目,因此可以使用數學函數隨機選擇一個項目。
一旦你有隨機選擇的密鑰名稱,你可以使用它來訪問該屬性的值。或者(如上所示),您可以更改函數以返回實際值。或者(沒有顯示,但微不足道)改變函數返回鍵和值作爲一個新的對象。由你決定。
從你的問題來看,你的數據結構是什麼是不清楚的,但假設movielist
是一個對象,其中每個屬性的關鍵名稱是電影標題和關聯屬性,該屬性是包含導演,藝術品和嵌套演員的數組,那麼你可以這樣做:
var randomMovieTitle = getRandomObjectPropertyName(movielist);
// randomMovieTitle might be, say, "Back to the future"
// you could then get the list of actors associated with the movie like so:
var actorsFromRandomMovie = movielist[randomMovieTitle][2];
// or get the director:
alert(movielist[randomMovieTitle][0]); // "Robert Zemeckis"
編輯:如果你不關心舊的瀏覽器可以使用Object.keys()
把所有的鍵名的數組,然後隨機從選擇。