2016-03-13 05:19:24 +08:00
|
|
|
export class Utils {
|
|
|
|
|
2016-07-07 18:19:08 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
static clone<T>(object: T): T {
|
|
|
|
return JSON.parse(JSON.stringify(object));
|
|
|
|
}
|
|
|
|
|
|
|
|
static equalsFilter(object: any, filter: any): boolean {
|
|
|
|
|
|
|
|
let keys = Object.keys(filter);
|
|
|
|
for (let i = 0; i < keys.length; i++) {
|
|
|
|
let key = keys[i];
|
|
|
|
if (object[key] !== filter[key]) {
|
|
|
|
return false;
|
|
|
|
}
|
2016-03-13 05:19:24 +08:00
|
|
|
}
|
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
return true;
|
|
|
|
}
|
2016-07-07 18:19:08 +08:00
|
|
|
|
2016-03-26 23:25:48 +08:00
|
|
|
|
2017-06-11 04:32:56 +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
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
let part = args[i].replace("\\", "/");
|
|
|
|
if (part === "/" || part === "./") continue;
|
2016-04-22 19:23:44 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
url += part + "/";
|
2016-05-13 00:24:26 +08:00
|
|
|
}
|
2017-06-11 04:32:56 +08:00
|
|
|
url = url.replace("//", "/");
|
|
|
|
|
|
|
|
return url.substring(0, url.length - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
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];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
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];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public static setKeysForced(targetObject: any, sourceObject: any) {
|
|
|
|
Object.keys(sourceObject).forEach((key) => {
|
|
|
|
if (typeof sourceObject[key] === "object") {
|
|
|
|
if (typeof targetObject[key] === "undefined") {
|
|
|
|
targetObject[key] = {};
|
2016-05-02 03:30:43 +08:00
|
|
|
}
|
2017-06-11 04:32:56 +08:00
|
|
|
Utils.setKeysForced(targetObject[key], sourceObject[key]);
|
|
|
|
} else {
|
|
|
|
targetObject[key] = sourceObject[key];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public static enumToArray(EnumType: any): Array<{ key: number; value: string; }> {
|
|
|
|
let arr: Array<{ key: number; value: string; }> = [];
|
|
|
|
for (let enumMember in EnumType) {
|
|
|
|
if (!EnumType.hasOwnProperty(enumMember)) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
let key = parseInt(enumMember, 10);
|
|
|
|
if (key >= 0) {
|
|
|
|
arr.push({key: key, value: EnumType[enumMember]});
|
|
|
|
}
|
2016-05-02 03:30:43 +08:00
|
|
|
}
|
2017-06-11 04:32:56 +08:00
|
|
|
return arr;
|
|
|
|
}
|
2016-04-22 19:23:44 +08:00
|
|
|
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
public static findClosest(number: number, arr: Array<number>) {
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
let curr = arr[0];
|
|
|
|
let diff = Math.abs(number - curr);
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
arr.forEach((value) => {
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
let newDiff = Math.abs(number - value);
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
if (newDiff < diff) {
|
|
|
|
diff = newDiff;
|
|
|
|
curr = value;
|
|
|
|
}
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
});
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2017-06-11 04:32:56 +08:00
|
|
|
return curr;
|
|
|
|
}
|
2016-05-12 17:00:46 +08:00
|
|
|
|
2016-03-13 05:19:24 +08:00
|
|
|
}
|