1

I'm trying to randomize an array in JavaScript whilst keeping key/value pairs. Here's what I've got so far:

data=[
["images/staff/img_staff_akwok_s.gif","Dr. A. Kwok","staff_akwok.phtml"],
["images/staff/img_staff_ayiu_s.gif","A. Yiu","staff_ayiu.phtml"],
["images/staff/img_staff_ally_s.gif","Ally Lee","staff_ally.phtml"],
["images/staff/img_staff_calvinkwan_s.gif","Calvin Kwan","staff_calvinkwan.phtml"],
["images/staff/img_staff_charles_s.gif","Charles Carlyle","staff_charles.phtml"],
["images/staff/img_staff_cherlotte_s.gif","Cherlotte","staff_cherlotte.phtml"],
["images/staff/img_staff_cychau_s.gif","C.Y. Chau","staff_cychau.phtml"],
["images/staff/img_staff_cyrus_s.gif","Cyrus","staff_cyrus.phtml"],
["images/staff/img_staff_cyruxleung_s.gif","梁詩穎","staff_cyruxleung.phtml"],
["images/staff/img_staff_davidchiu_s.gif","David Chiu","staff_davidchiu.phtml"],
["images/staff/img_staff_davidho_s.gif","David Ho","staff_davidho.phtml"],
["images/staff/img_staff_frankietam_s.gif","Frankie Tam","staff_frankietam.phtml"],
["images/staff/img_staff_jeremy_s.gif","Jeremy","staff_jeremy.phtml"],
["images/staff/img_staff_jng_s.gif","J.Ng","staff_jng.phtml"],
["images/staff/img_staff_jo_s.gif","Jo","staff_jo.phtml"],
["images/staff/img_staff_joesuen_s.gif","Joe Suen","staff_joesuen.phtml"],
["images/staff/img_staff_johnny_s.gif","張烈","staff_johnny.phtml"],
["images/staff/img_staff_jt_s.gif","J.T.","staff_jt.phtml"],
["images/staff/img_staff_jyeung_s.gif","J. Yeung","staff_jyeung.phtml"],
["images/staff/img_staff_kam_s.gif","曾定金","staff_kam.phtml"],
["images/staff/img_staff_kit_s.gif","黃政傑","staff_kit.phtml"],
["images/staff/img_staff_marcochan_s.gif","Marco Chan","staff_marcochan.phtml"],
["images/staff/img_staff_oten_s.gif","K.OTen","staff_oten.phtml"],
["images/staff/img_staff_leungsir_s.gif","梁頌佳","staff_leungsir.phtml"],
["images/staff/img_staff_lun_s.gif","李聚麐","staff_lun.phtml"],
["images/staff/img_staff_peterchow_s.gif","Peter Chow","staff_peterchow.phtml"],
["images/staff/img_staff_raphael_s.gif","Raphael","staff_raphael.phtml"],
["images/staff/img_staff_raymondwong_s.gif","Raymond Wong","staff_raymondwong.phtml"],
["images/staff/img_staff_rickyuen_s.gif","Rick","staff_rickyuen.phtml"],
["images/staff/img_staff_river_s.gif","余江河","staff_river.phtml"],
["images/staff/img_staff_samuelyu_s.gif","Samuel Yu","staff_samuelyu.phtml"],
["images/staff/img_staff_shun_s.gif","楊家舜","staff_shun.phtml"],
["images/staff/img_staff_stefanie_s.gif","Stefanie Chan","staff_stefanie.phtml"],
["images/staff/img_staff_thomas_s.gif","Thomas Yan","staff_thomas.phtml"],
["images/staff/img_staff_tonyyoon_s.gif","Tony Yoon","staff_tonyyoon.phtml"],
["images/staff/img_staff_victoria_s.gif","Victoria Poon","staff_victoria.phtml"],
["images/staff/img_staff_wchen_s.gif","陳偉亮 (W.Chen)","staff_wchen.phtml"]
]

data = data[Math.floor(Math.random()*data.length)]
2
  • OK, so what's the question? :) Commented Dec 29, 2010 at 4:30
  • if you want to re-use the array data change it to datas and call like var data = datas[Math.floor(Math.random()*datas.length)] Commented Dec 29, 2010 at 4:53

2 Answers 2

4

Here's an article on shuffling algorithms.

And here's some Javascript code lifted from that article:

var n = data.length;
for(var i = n - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var tmp = data[i];
    data[i] = data[j];
    data[j] = tmp;
}
Sign up to request clarification or add additional context in comments.

Comments

0

Look at the solutions here:

The shortest is:

["a", "b", "c", "d"].sort(function() { return 0.5 - Math.random();});

However, it does not really results in very random order.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.