2017-09-05 53 views
0

我想要完成的是,sub/childclassArray<T>,有我自己的自定義方法,但在這裏面臨一個問題,我不能編輯Array內的項目。 ..JavaScript擴展陣列和獲得完全控制

讓我們看看一個例子來闡明我在做什麼:

export class Collection<T> extends Array<T> 
{ 
    remove(key, value) { 
     this = this.filter(function (el) { 
      return el[key] !== value; 
     }); 
    } 
} 

,所以我可以有一個ArrayUser

let users:Collection<User> = []; 

//add stuff etc ... 

//then I can say 
users.remove('name','Jhone Doe'); 

所以它刪除具有keynamevalueJhone Doe,但顯然我不能指定this實例,所以我將如何解決,任何項目?

+0

或者只是添加數組擴展方法https://stackoverflow.com/questions/38434337/how-to-create-an-extension-method-in-typescript-for-date-data-type – Slai

回答

0

首先,remove將根本不會被發現,除非你宣佈你的數組作爲

let users: Collection<User> = []; 

第二,如果你想刪除的地方的元素,你需要使用splice,還是自己做:

remove(key, value) { 
    let j = 0; 

    for (const el of this) if (el[key] !== value) this[j++] = el; 

    this.length = j; 
} 

你做了這一切之後,即使我不會感到驚訝,如果你遇到了意外的行爲,尤其是涉及到length。子類異常對象,如數組仍然是一項工作正在進行中。

+0

- 關於它的聲明'Array'而不是'Collection'這是一個錯誤,我編輯過了,沒有辦法獲得'Array'屬性的完全訪問權限? – Abanoub

+0

當你說「獲得對'Array'屬性的完全訪問權限」時,你是什麼意思?你有完全的訪問權限。你不能做的是將對象從它自己之下移出。你不能以任何形式的對象。 – 2017-09-06 03:26:09