127 lines
4.0 KiB
TypeScript
127 lines
4.0 KiB
TypeScript
declare interface Array<T> {
|
||
/**
|
||
* 移除一個值並且回傳
|
||
* @param index
|
||
*/
|
||
ExRemoveAt(index: number): T;
|
||
/**
|
||
* 移除全部值(注意. 參考的也會被清空)
|
||
* @example
|
||
*
|
||
* let bar: number[] = [1, 2, 3];
|
||
* let bar2: number[] = bar;
|
||
* bar.Clear();
|
||
* console.log(bar, bar2);
|
||
*
|
||
* // {
|
||
* // "bar": [],
|
||
* // "bar2": []
|
||
* // }
|
||
*/
|
||
Clear(): void;
|
||
/**
|
||
* 物件陣列排序,asc&key陣列長度請一樣
|
||
* PS. boolean 帶false是先true在false
|
||
* @link JavaScript Object 排序 http://www.eion.com.tw/Blogger/?Pid=1170#:~:text=JavaScript%20Object%20排序
|
||
* @param asc 是否升序排列(小到大)
|
||
* @param key 需排序的key(優先順序左到右)(沒有就放空)
|
||
*/
|
||
ObjectSort(asc?: boolean[], key?: string[]): any[];
|
||
/**
|
||
* 設計給Array<cc.Component.EventHandler>forHoldButton使用
|
||
* Add a non persistent listener to the UnityEvent.
|
||
* @param call Callback function.
|
||
*/
|
||
AddListener(call: Function): void;
|
||
}
|
||
|
||
Array.prototype.ExRemoveAt || Object.defineProperty(Array.prototype, "ExRemoveAt", {
|
||
enumerable: false,
|
||
value: function (index: number): any {
|
||
let item: any = this.splice(index, 1);
|
||
return item[0];
|
||
}
|
||
});
|
||
|
||
Array.prototype.Clear || Object.defineProperty(Array.prototype, "Clear", {
|
||
enumerable: false,
|
||
value: function (): void {
|
||
this.length = 0;
|
||
|
||
// let foo: number[] = [1, 2, 3];
|
||
// let bar: number[] = [1, 2, 3];
|
||
// let foo2: number[] = foo;
|
||
// let bar2: number[] = bar;
|
||
// foo = [];
|
||
// bar.length = 0;
|
||
// console.log(foo, bar, foo2, bar2);
|
||
|
||
// {
|
||
// "foo": [],
|
||
// "bar": [],
|
||
// "foo2": [
|
||
// 1,
|
||
// 2,
|
||
// 3
|
||
// ],
|
||
// "bar2": []
|
||
// }
|
||
}
|
||
});
|
||
|
||
Array.prototype.ObjectSort || Object.defineProperty(Array.prototype, "ObjectSort", {
|
||
enumerable: false,
|
||
/**
|
||
* @param asc 是否升序排列(小到大)
|
||
* @param key 需排序的key(優先順序左到右)(沒有就放空)
|
||
*/
|
||
value: function (asc: boolean[] = [true], key?: string[]): any[] {
|
||
if (this.length === 0) {
|
||
return this;
|
||
} else if (!key || key.length === 0) {
|
||
console.error(`ObjectSort key error`);
|
||
return this;
|
||
} else if (asc.length !== key.length) {
|
||
console.error(`ObjectSort key asc error asc.length: ${asc.length}, key.length: ${key.length}`);
|
||
return this;
|
||
}
|
||
for (let i: number = 0; i < key.length; i++) {
|
||
const keyname: string = key[i];
|
||
if (this[0][keyname] === undefined) {
|
||
console.error(`ObjectSort has not key[${i}]: ${keyname}`);
|
||
return this;
|
||
}
|
||
}
|
||
let count: number = key ? key.length : 1;
|
||
let arr: any[];
|
||
for (let i: number = count - 1; i >= 0; i--) {
|
||
arr = this.sort(function (a: any, b: any): 1 | -1 {
|
||
let mya: any = a;
|
||
let myb: any = b;
|
||
if (key) {
|
||
mya = a[key[i]];
|
||
myb = b[key[i]];
|
||
}
|
||
|
||
// 加個等於數字相同不要再去排序到
|
||
if (asc[i]) {
|
||
return mya >= myb ? 1 : -1;
|
||
} else {
|
||
return mya <= myb ? 1 : -1;
|
||
}
|
||
});
|
||
}
|
||
return arr;
|
||
}
|
||
});
|
||
|
||
Array.prototype.AddListener || Object.defineProperty(Array.prototype, "AddListener", {
|
||
enumerable: false,
|
||
value: function (call: Function): void {
|
||
let EventHandler: cc.Component.EventHandler = new cc.Component.EventHandler();
|
||
EventHandler.target = <any>"Callback";
|
||
EventHandler.component = "Callback";
|
||
EventHandler.handler = <any>call;
|
||
this.push(EventHandler);
|
||
}
|
||
}); |