2017-06-12 5 views
-5

オブジェクトを作成し、typescriptでデータを動的に追加したいと考えています。例のためオブジェクトを角度2でプログラムで作成する

let data={ 
    "date":"27-5-2017", 
    "name":"John" 
}; 

これは私の最初のオブジェクトです。今度は、件名のようなデータを追加したいと思います。

"Subject1":"20" 
"Subject2":"30" 

この対象は学生によって異なります。このSubjectをデータオブジェクトに追加するにはどうすればよいですか。

+0

Vottersダウンあなたがこの質問を使用していただきました!間違っを定義することができます。 –

答えて

3

としてそれを定義します。あなたは初期化され、すでにJSONオブジェクトがある場合

let data:any; 

: を初期化し、最初に追加したくない場合は、あなたが直接

data['dynamic_key'] = value; 

を使用することができます

data = {'dynamic_key' : value }; 
+0

それは働いた!!!私はこれをループで追加しています。 –

0

data.key = valueで直接行うことができます。

+0

プロトタイプは未定義です。 –

+0

ええ、私の最後にチェック。プロトタイプはTSで動作しません。答えを更新しました。 –

1

このように直接割り当てることができます。

data.Subject1 = "20" 
data.Subject2 = "30" 
+0

私はSubject1を最初に宣言していないので動かない –

1

私はこれのためのクラスを作成します。これの利点は、data['subject1'] = 'math';またはdata.subject1 = mathなどのメソッドでプロパティを動的/手動で追加する場合と比べて、プロパティ名が一定であることを保証することです。

class Student{ 

    public name: string; 
    public dateOfEntry: string; 
    public subjects: Array<Subject>; 

    constructor(name: string, dateOfEntry: string){ 
    this.name = name; 
    this.dateOfEntry = dateOfEntry; 

    this.subjects = new Array<Subject>(); 
    } 

    public addSubject(subject: Subject){ 
    // if we have not already added this subject to the list 
    if(!this.subjects.find(val => val == subject)) 
     this.subjects.push(subject); 
    } 

} 


class Subject{ 
    public name: string; 

    constructor(name: string){ 
     this.name = name; 
    } 
} 

その後、新しい学生をcraeteしたいとき...

let bob: Student = new Student("bob", new Date().toString()); 
bob.addSubject(new Subject("Math")); // adds to list 
bob.addSubject(new Subject("English")); // adds to list 
bob.addSubject(new Subject("Math")); // WILL NOT ADD - already exists 
+0

ありがとうございます。これは、クラスを作るための素晴らしいアイデアです。私は確かにこれも調べます。現在、私は答えを見つけました –

+0

@ShabbirDhangot選択された回答に対してこれを強くお勧めしますが、解決策を見つけられたらうれしいです – Zze

関連する問題