UNPKG

olympus-r

Version:

一个力求简单易用的前端开发框架 #### 开发语言 TypeScript #### 核心架构 MVC #### 模块间通讯和解耦 采用事件机制,利用一个全局唯一的事件派发器进行模块间通讯,解耦模块间依赖 #### 表现层结构 使用桥接模式拆分接口与实现,达到一套核心驱动多套表现层的目的(目前支持DOM、Egret、PixiJS三种表现层),同时支持表现层的未来可扩展性 #### TypeScript装饰器注入 框架提供TypeScript装饰器注入功能,便捷获取托管对象。例如:

112 lines (111 loc) 3.08 kB
import Dictionary from "./Dictionary"; /** * 简单数组乱序 * * @export * @template T * @param {T} a * @returns {T} */ export function shuffle(a) { var len = a.length; for (var i = 1; i < len; i++) { var end = len - i; var index = (Math.random() * (end + 1)) >> 0; var t = a[end]; a[end] = a[index]; a[index] = t; } return a; } /** * 从数组指定范围内随机取出指定数量的不重复元素 * ArrayUtils.randomize([0,1,2,3,4,5,6,7,8,9], 3, 2, 7); * //返回[6,2,3] * * @param arr 原始数组 * @param count 数量,默认为范围内全部元素 * @param begin 起始位置,默认为0 * @param end 结束位置,默认为数组长度 */ export function randomize(arr, count, begin, end) { if (count === void 0) { count = -1; } if (begin === void 0) { begin = -1; } if (end === void 0) { end = -1; } if (!arr) throw new Error("invalid argument"); arr = arr.concat(); var len = arr.length; if (begin < 0) begin = 0; if (end < 0) end = len; if (count < 0) count = end - begin; var arr2 = []; var end2 = begin + count; for (var i = begin; i < end2; i++) { var index = (Math.random() * (end - i) + i) >> 0; arr2[i - begin] = arr[index]; arr[index] = arr[i]; } return arr2; } /** * 进行权重随机 * * @export * @template T * @param {T[]} arr 原始数组 * @param {number[]} weight 权重数组,应保证权重数组的元素数量不小于原始数组的元素数量 * @returns {T} 选取的结果 */ export function randomizeWeight(arr, weight) { if (!arr || !weight) throw new Error("invalid argument"); if (weight.length < arr.length) throw new Error("权重数组的元素数量不应小于原始数组的元素数量"); // 根据权重数组建立一个区间数组 var regions = []; var sum = 0; for (var i in arr) { sum += weight[i]; regions.push(sum); } // 随机一个位置 var ran = Math.random() * sum; // 搜索该位置所属区间索引 var index; for (var i = 0, len = regions.length; i < len; i++) { if (ran < regions[i]) { index = i; break; } } // 返回索引处的原始数组元素 return arr[index]; } /** * 数组去重,不会修改原数组 * * @export * @param {any[]} list * @returns {any[]} */ export function unique(list) { if (!list) return list; // 初始化 var hash = new Dictionary(), result = []; // 遍历当前数组 for (var i = 0, len = list.length; i < len; i++) { // 如果hash表中没有当前项 if (!hash.get(list[i])) { // 存入hash表 hash.set(list[i], true); // 把当前数组的当前项push到临时数组里面 result.push(list[i]); } } return result; }