UNPKG

@xtor/cga.js

Version:

Xtor Compute Geometry Algorithm Libary 计算几何算法库

126 lines (115 loc) 2.93 kB
import { toFixed as toFixedOne } from "../math/Math" /** * 数组深度复制 * @param {Array} array */ export function clone(array) { var result = new Array() for (let i = 0; i < array.length; i++) { var ele = array[i]; if (ele instanceof Number || ele instanceof String) result[i] = ele; else if (ele.clone) { result[i] = ele.clone(); } else if (ele instanceof Array) result[i] = clone(ele); else throw ("数组有元素不能clone") } return result; } /** * 数组中所有数字或者向量固定位数 * @param {Array} array * @param {Number} precision */ export function toFixed(array, precision) { for (let i = 0; i < array.length; i++) { const e = array[i]; if (e instanceof Array) toFixed(e); else array[i] = toFixedOne(e, precision); } } /** * 遍历多级数组中所有对象 * @param {Array} array * @param {Function} method */ export function forall(array, method) { for (let i = 0; i < array.length; i++) { const ele = array[i]; method(ele); if (Array.isArray(ele)) forall(ele, method) } } /** * 分类 * example: * var arry = [1,2,3,4,5,6] * var result = classify(array,(a)={return a%2===0}) * * @param {Array} array * @param {Function} classifyMethod 分类方法 */ export function classify(array, classifyMethod) { var result = []; for (let i = 0; i < array.length; i++) { for (let j = 0; j < result.length; j++) { if (classifyMethod(array[i], result[j][0], result[j])) { result[j].push(array[i]); } else { result.push([array[i]]); } } } return result; } /** * 去掉重复元素 * @param {Array} array * @param {Function} uniqueMethod 去重复 * @param {Function} sortMethod 排序 */ export function unique(array, uniqueMethod, sortMethod) { if (sortMethod) { array.sort(sortMethod); for (let i = 0; i < array.length; i++) { for (let j = i + 1; j < array.length; j++) { if (uniqueMethod(array[i], array[j]) === true) { array.splice(j, 1); j-- } else break; } } return array; } for (let i = 0; i < array.length; i++) { for (let j = i + 1; j < array.length; j++) { if (uniqueMethod(array[i], array[j]) === true) { array.splice(j, 1); j-- } } } return array; }