mirror of
https://github.com/iib0011/omni-tools.git
synced 2025-09-19 22:19:36 +02:00
69 lines
2.3 KiB
TypeScript
69 lines
2.3 KiB
TypeScript
export type SplitOperatorType = 'symbol' | 'regex';
|
|
|
|
function interweave(
|
|
array1: string[],
|
|
array2: string[]) {
|
|
const result: string[] = [];
|
|
const maxLength = Math.max(array1.length, array2.length);
|
|
|
|
for (let i = 0; i < maxLength; i++) {
|
|
if (i < array1.length) result.push(array1[i]);
|
|
if (i < array2.length) result.push(array2[i]);
|
|
}
|
|
return result;
|
|
}
|
|
function duplicate(
|
|
input: string[],
|
|
concatenate: boolean,
|
|
reverse: boolean,
|
|
copy?: number
|
|
) {
|
|
if (copy) {
|
|
if (copy > 0) {
|
|
let result: string[] = [];
|
|
let toAdd: string[] = [];
|
|
let WholePart: string[] = [];
|
|
let fractionalPart: string[] = [];
|
|
const whole = Math.floor(copy);
|
|
const fractional = copy - whole;
|
|
if (!reverse) {
|
|
WholePart = concatenate ? Array(whole).fill(input).flat() : Array(whole - 1).fill(input).flat();
|
|
fractionalPart = input.slice(0, Math.floor(input.length * fractional));
|
|
toAdd = WholePart.concat(fractionalPart);
|
|
result = concatenate ? WholePart.concat(fractionalPart) : interweave(input, toAdd);
|
|
} else {
|
|
WholePart = Array(whole - 1).fill(input).flat().reverse()
|
|
fractionalPart = input.slice().reverse().slice(0, Math.floor(input.length * fractional));
|
|
toAdd = WholePart.concat(fractionalPart);
|
|
result = concatenate ? input.concat(toAdd) : interweave(input, toAdd);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
throw new Error("Number of copies cannot be negative");
|
|
}
|
|
throw new Error("Number of copies must be a valid number");
|
|
}
|
|
|
|
export function duplicateList(
|
|
splitOperatorType: SplitOperatorType,
|
|
splitSeparator: string,
|
|
joinSeparator: string,
|
|
input: string,
|
|
concatenate: boolean,
|
|
reverse: boolean,
|
|
copy?: number
|
|
): string {
|
|
let array: string[];
|
|
let result: string[];
|
|
switch (splitOperatorType) {
|
|
case 'symbol':
|
|
array = input.split(splitSeparator);
|
|
break;
|
|
case 'regex':
|
|
array = input.split(new RegExp(splitSeparator)).filter(item => item !== '');
|
|
break;
|
|
}
|
|
result = duplicate(array, concatenate, reverse, copy);
|
|
return result.join(joinSeparator);
|
|
} |