Array.prototype.创建 = function 创建 () { ? ? var 局_参数列表 = []; ? ? for (var i = 0, j = arguments; i < j.length; i++) 局_参数列表.push (j [i]); ? ? var 局_数组对象 = 局_参数列表.length > 0 ? new Array (局_参数列表 [0]) : []; ? ? return 局_参数列表.length == 1 ? 局_数组对象 : 局_数组对象.fill ([]).推理 (function () { ? ? ? ? return this.创建.apply (this, 局_参数列表.slice (1)); ? ? }); } ?
Array.prototype.推理 = function 推理 () { ? ? if (arguments.length > 0) ? ? if (typeof (arguments [0]) == "function") ? ? for (var i = 0, j = this; i < j.length; i++) { ? ? ? ? j [i] = arguments [0].apply (j [i], [i]); ? ? } ? ? return this; } ?
Array.prototype.随机化 = function 随机化 () { ? ? for (var i = this.length; i > 0; i--) { ? ? ? ? var index = ~~ (Math.random () * i --); ? ? ? ? [this [i], this [index]] = [this [index], this [i]]; ? ? } ? ? return this; }
Array.prototype.乱序 = function 乱序 () { ? ? return 局_this = this, this.推理 (function (i) { return {"key": Math.random (), "value": 局_this [i]}; }).sort (function (x, y) { return x.key - y.key; }).推理 (function () { return this.value; }); }
Array.prototype.离散 = function 离散 () { ? ? return this.sort (function () { return Math.random () - 0.5; }); }
Array.prototype.重排 = function 重排 () { ? ? if (this.length == 0) return this; ? ? var 局_重排数组 = this.splice (0, 1); ? ? var 局_Getter = [局_重排数组.shift, 局_重排数组.pop]; ? ? var 局_Setter = [局_重排数组.push, 局_重排数组.unshift]; ? ? for (var i = this.length; i > 0; i--) { ? ? ? ? 局_Setter [Math.random () > 0.5 ? 0 : 1].call (局_重排数组, 局_Getter [Math.random () > 0.5 ? 0 : 1].apply (this)); ? ? } ? ? return 局_重排数组; } ?
用法:
[].创建 (8).推理 (function () { return arguments [0]; }).随机化 ();
结果:
[1, 0, 2, 4, 5, 6, 7, 3]
[6, 1, 2, 3, 5, 4, 0, 7]
注释:
慎用离散和重排,它们的随机性较差
|