2017-09-05 8 views
0

完全な制御を得るには、私自身のカスタムメソッドを持っていること、Array<T>sub/childclassであるが、ここで問題に直面しています、私はArray内の項目を編集することはできません。javascript配列を拡張し、私が達成しようとしているものを

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

をので、私はUser

let users:Collection<User> = []; 

//add stuff etc ... 

//then I can say 
users.remove('name','Jhone Doe'); 
Arrayを持つことができます..

は私がやっているものを明確にする例を見ることができます

ので、keynamevalueJhone Doeを持っている任意の項目を削除しますが、明らかに私はthisインスタンスを割り当てることはできませんので、どのように私はそれに取り組むのでしょうか?あなたが場所にある要素を削除したい場合は、

let users: Collection<User> = []; 

第二として、あなたの配列を宣言しない限り、

+0

または単に追加アレイの拡張メソッドはhttps://stackoverflow.com/questions/38434337/how-to-create-an-extension-method-in-typescript-for-date-data-type – Slai

答えて

0

まず、removeは全く検出されません、あなたはspliceを使用する必要がある、またはそれを自分の操作を行います。あなたはこのすべてをやった後でも

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

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

    this.length = j; 
} 

あなたが予期しない動作に走った場合、私はlengthに関連し、特にとして、驚かないだろう。配列などのエキゾチックなオブジェクトをサブクラス化することは、依然として進行中の作業です。

+0

- 約としてそれを宣言する'Collection'の代わりに' Array'を間違えてしまったので、 'Array'プロパティで完全なアクセス権を得る方法はありません。 – Abanoub

+0

"Array'プロパティでフルアクセス権を得るとはどういう意味ですか?あなたは完全なアクセス権を持っています。あなたがすることができないのは、オブジェクトをスワップすることです。あなたはどんな種類の物でもそれをすることはできません。 –

関連する問題