mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
82 lines
1.9 KiB
TypeScript
82 lines
1.9 KiB
TypeScript
import { inject, injectable } from 'inversify';
|
|
import { ServiceIdentifiers } from '../container/ServiceIdentifiers';
|
|
|
|
import { IArrayUtils } from '../interfaces/utils/IArrayUtils';
|
|
import { IRandomGenerator } from '../interfaces/utils/IRandomGenerator';
|
|
|
|
@injectable()
|
|
export class ArrayUtils implements IArrayUtils {
|
|
/**
|
|
* @type {IRandomGenerator}
|
|
*/
|
|
private readonly randomGenerator: IRandomGenerator;
|
|
|
|
/**
|
|
* @param {IRandomGenerator} randomGenerator
|
|
*/
|
|
constructor (
|
|
@inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator
|
|
) {
|
|
this.randomGenerator = randomGenerator;
|
|
}
|
|
|
|
/**
|
|
* @param {number} length
|
|
* @returns {number[]}
|
|
*/
|
|
public arrayRange (length: number): number[] {
|
|
const range: number[] = [];
|
|
|
|
for (let i: number = 0; i < length; i++) {
|
|
range.push(i);
|
|
}
|
|
|
|
return range;
|
|
}
|
|
|
|
/**
|
|
* @param {T[]} array
|
|
* @param {number} times
|
|
* @returns {T[]}
|
|
*/
|
|
public arrayRotate <T> (array: T[], times: number): T[] {
|
|
if (!array.length) {
|
|
throw new ReferenceError(`Cannot rotate empty array.`);
|
|
}
|
|
|
|
if (times <= 0) {
|
|
return array;
|
|
}
|
|
|
|
const newArray: T[] = array;
|
|
|
|
let temp: T | undefined;
|
|
|
|
while (times--) {
|
|
temp = newArray.pop();
|
|
|
|
if (temp) {
|
|
newArray.unshift(temp);
|
|
}
|
|
}
|
|
|
|
return newArray;
|
|
}
|
|
|
|
/**
|
|
* @param {T[]} array
|
|
* @returns {T[]}
|
|
*/
|
|
public arrayShuffle <T> (array: T[]): T[] {
|
|
const shuffledArray: T[] = [...array];
|
|
|
|
for (let i: number = shuffledArray.length; i; i--) {
|
|
const j: number = Math.floor(this.randomGenerator.getMathRandom() * i);
|
|
|
|
[shuffledArray[i - 1], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i - 1]];
|
|
}
|
|
|
|
return shuffledArray;
|
|
}
|
|
}
|