UNPKG

molstar

Version:

A comprehensive macromolecular library.

158 lines (157 loc) 4.41 kB
/** * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ // TODO move to mol-math as Vector??? /** Get the maximum value in an array */ export function arrayMax(array) { var max = -Infinity; for (var i = 0, il = array.length; i < il; ++i) { if (array[i] > max) max = array[i]; } return max; } /** Get the minimum value in an array */ export function arrayMin(array) { var min = Infinity; for (var i = 0, il = array.length; i < il; ++i) { if (array[i] < min) min = array[i]; } return min; } /** Get the minimum & maximum value in an array */ export function arrayMinMax(array) { var min = Infinity; var max = -Infinity; for (var i = 0, il = array.length; i < il; ++i) { if (array[i] < min) min = array[i]; if (array[i] > max) max = array[i]; } return [min, max]; } /** Get the sum of values in an array */ export function arraySum(array, stride, offset) { if (stride === void 0) { stride = 1; } if (offset === void 0) { offset = 0; } var n = array.length; var sum = 0; for (var i = offset; i < n; i += stride) { sum += array[i]; } return sum; } /** Get the mean of values in an array */ export function arrayMean(array, stride, offset) { if (stride === void 0) { stride = 1; } if (offset === void 0) { offset = 0; } return arraySum(array, stride, offset) / (array.length / stride); } /** Get the root mean square of values in an array */ export function arrayRms(array) { var n = array.length; var sumSq = 0; for (var i = 0; i < n; ++i) { var di = array[i]; sumSq += di * di; } return Math.sqrt(sumSq / n); } /** Fill an array with serial numbers starting from 0 until n - 1 (defaults to array.length) */ export function fillSerial(array, n) { for (var i = 0, il = n ? Math.min(n, array.length) : array.length; i < il; ++i) array[i] = i; return array; } export function arrayRemoveInPlace(xs, x) { var i = 0, found = false; for (var il = xs.length; i < il; i++) { if (xs[i] === x) { found = true; break; } } if (!found) return false; arrayRemoveAtInPlace(xs, i); return true; } export function arrayRemoveAtInPlace(xs, idx) { for (var i = idx, _i = xs.length - 1; i < _i; i++) { xs[i] = xs[i + 1]; } xs.pop(); } export function arraySetAdd(xs, x) { if (xs.indexOf(x) >= 0) return false; xs.push(x); return true; } export function arraySetRemove(xs, x) { var idx = xs.indexOf(x); if (idx < 0) return false; for (var i = idx, _i = xs.length - 1; i < _i; i++) { xs[i] = xs[i + 1]; } xs.pop(); return true; } /** * Caution, O(n^2) complexity. Only use for small input sizes. * For larger inputs consider using `SortedArray`. */ export function arrayAreIntersecting(xs, ys) { for (var i = 0, il = xs.length; i < il; ++i) { if (ys.includes(xs[i])) return true; } return false; } /** * Caution, O(n^2) complexity. Only use for small input sizes. * For larger inputs consider using `SortedArray`. */ export function arrayIntersectionSize(xs, ys) { var count = 0; for (var i = 0, il = xs.length; i < il; ++i) { if (ys.includes(xs[i])) count += 1; } return count; } export function arrayEqual(xs, ys) { if (!xs || xs.length === 0) return !ys || ys.length === 0; if (!ys) return false; var lenX = xs.length; if (lenX !== ys.length) return false; for (var i = 0; i < lenX; i++) { if (xs[i] !== ys[i]) return false; } return true; } export function arrayIsIdentity(xs) { for (var i = 0, _i = xs.length; i < _i; i++) { if (xs[i] !== i) return false; } return true; } export function arrayMapUpsert(xs, key, value) { for (var i = 0, il = xs.length; i < il; ++i) { if (xs[i][0] === key) { xs[i][1] = value; return; } } xs.push([key, value]); }