学习链接

关于 JavaScript 的数组随机排序

JavaScript专题之乱序

关于数组乱序的深挖——“感觉一直在写毒代码”

数组乱序

  1. function shuffle(arr) {
  2. let new_arr = arr.map(i => ({ v: i, r: Math.random() }));
  3. new_arr.sort((a, b) => a.r - b.r);
  4. arr.splice(0, arr.length, ...new_arr.map(i => i.v));
  5. return arr;
  6. }
  1. function shuffle(arr) {
  2. let i = arr.length;
  3. while (i) {
  4. let j = Math.floor(Math.random() * i--);
  5. [arr[j], arr[i]] = [arr[i], arr[j]];
  6. }
  7. return arr;
  8. }
  1. function shuffle(arr) {
  2. const len = arr.length;
  3. for (let i = 0; i < len; i++) {
  4. let j = Math.floor(Math.random() * (len - i)) + i;
  5. [arr[j], arr[i]] = [arr[i], arr[j]];
  6. }
  7. return arr;
  8. }

概率测试

  1. let times = 100000;
  2. let res = {};
  3. for (let i = 0; i < times; i++) {
  4. let arr = shuffle([1, 2, 3]);
  5. let key = JSON.stringify(arr);
  6. res[key] ? res[key]++ : res[key] = 1;
  7. }
  8. // 为了方便展示,转换成百分比
  9. for (let key in res) {
  10. res[key] = res[key] / times * 100 + '%'
  11. }
  12. console.log(res);