1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/common/Utils.ts

156 lines
3.6 KiB
TypeScript
Raw Normal View History

2016-03-13 05:19:24 +08:00
export class Utils {
2018-12-02 19:22:05 +08:00
static chunkArrays<T>(arr: T[], chunkSize: number): T[][] {
const R = [];
for (let i = 0; i < arr.length; i += chunkSize) {
R.push(arr.slice(i, i + chunkSize));
}
return R;
}
2016-03-13 05:19:24 +08:00
static clone<T>(object: T): T {
return JSON.parse(JSON.stringify(object));
}
2018-11-29 06:49:33 +08:00
static zeroPrefix(value: string | number, length: number) {
2018-11-18 03:15:48 +08:00
const ret = '00000' + value;
return ret.substr(ret.length - length);
}
static equalsFilter(object: any, filter: any): boolean {
if (typeof filter !== 'object' || filter == null) {
return object === filter;
2017-07-15 18:47:11 +08:00
}
2018-05-29 02:03:12 +08:00
if (!object) {
return false;
}
2017-07-08 18:43:42 +08:00
const keys = Object.keys(filter);
for (let i = 0; i < keys.length; i++) {
2017-07-08 18:43:42 +08:00
const key = keys[i];
if (typeof filter[key] === 'object') {
if (Utils.equalsFilter(object[key], filter[key]) === false) {
2017-07-08 18:43:42 +08:00
return false;
}
} else if (object[key] !== filter[key]) {
return false;
2017-07-08 18:43:42 +08:00
}
2016-03-13 05:19:24 +08:00
}
return true;
}
2016-03-26 23:25:48 +08:00
/**
*
* @param from
* @param to inclusive
* @returns {Array}
*/
static createRange(from: number, to: number): Array<number> {
const arr = new Array(to - from + 1);
let c = to - from + 1;
while (c--) {
arr[c] = to--;
}
return arr;
}
2017-07-20 02:47:09 +08:00
static concatUrls(...args: Array<string>) {
let url = '';
for (let i = 0; i < args.length; i++) {
if (args[i] === '' || typeof args[i] === 'undefined') {
continue;
}
2016-03-26 23:25:48 +08:00
const part = args[i].replace('\\', '/');
if (part === '/' || part === './') {
continue;
}
2016-04-22 19:23:44 +08:00
url += part + '/';
}
url = url.replace('//', '/');
if (url.trim() === '') {
url = './';
2017-07-20 02:47:09 +08:00
}
return url.substring(0, url.length - 1);
}
2017-07-20 02:47:09 +08:00
public static updateKeys(targetObject: any, sourceObject: any) {
Object.keys(sourceObject).forEach((key) => {
if (typeof targetObject[key] === 'undefined') {
return;
}
if (typeof targetObject[key] === 'object') {
Utils.updateKeys(targetObject[key], sourceObject[key]);
} else {
targetObject[key] = sourceObject[key];
}
});
}
2017-07-20 02:47:09 +08:00
public static setKeys(targetObject: any, sourceObject: any) {
Object.keys(sourceObject).forEach((key) => {
if (typeof targetObject[key] === 'object') {
Utils.setKeys(targetObject[key], sourceObject[key]);
} else {
targetObject[key] = sourceObject[key];
}
});
}
2017-07-20 02:47:09 +08:00
public static setKeysForced(targetObject: any, sourceObject: any) {
Object.keys(sourceObject).forEach((key) => {
if (typeof sourceObject[key] === 'object') {
if (typeof targetObject[key] === 'undefined') {
targetObject[key] = {};
}
Utils.setKeysForced(targetObject[key], sourceObject[key]);
} else {
targetObject[key] = sourceObject[key];
}
});
}
2017-07-20 02:47:09 +08:00
public static enumToArray(EnumType: any): Array<{
2017-07-08 18:43:42 +08:00
key: number;
value: string;
}> {
const arr: Array<{ key: number; value: string; }> = [];
for (const enumMember in EnumType) {
if (!EnumType.hasOwnProperty(enumMember)) {
continue;
}
const key = parseInt(enumMember, 10);
if (key >= 0) {
arr.push({key: key, value: EnumType[enumMember]});
}
}
return arr;
}
2016-04-22 19:23:44 +08:00
2016-05-12 17:00:46 +08:00
2017-07-20 02:47:09 +08:00
public static findClosest(number: number, arr: Array<number>) {
2016-05-12 17:00:46 +08:00
let curr = arr[0];
let diff = Math.abs(number - curr);
2016-05-12 17:00:46 +08:00
arr.forEach((value) => {
2016-05-12 17:00:46 +08:00
const newDiff = Math.abs(number - value);
2016-05-12 17:00:46 +08:00
if (newDiff < diff) {
diff = newDiff;
curr = value;
}
2016-05-12 17:00:46 +08:00
});
2016-05-12 17:00:46 +08:00
return curr;
}
2016-05-12 17:00:46 +08:00
2016-03-13 05:19:24 +08:00
}