2017-02-17 12 views
3

呼び出されるたびにオブジェクトを受け取る関数があり、このオブジェクトを配列に格納します。しかし、到着したオブジェクトを配列にプッシュすると、前のオブジェクトが上書きされます。どのように私はすべてのオブジェクトがfor()関数で印刷されるように、関数で毎回前のものを上書きせずにオブジェクトを保存するのですか?オブジェクトが配列に上書きされます

drawtimeline(i_items, nom_cal, _hitoService, idcalbuscador) { 
    var container = document.getElementById('timeLine'); 
    var result: any[] = []; 
     result.push({ "_id": this.idcalbuscador, "title": nom_cal }); 
    for (let i of result) { 
    console.log(i); 
     alert(i); 
    } 
} 

答えて

4

あなたresult変数は、drawtimeline関数に対してローカルです。その関数の実行が終了すると、変数resultがクリアされます。その関数が再び呼び出されると、新しいresult配列が割り当てられ、配列に格納されている古いオブジェクトをクリアしているように見えます。関数を実行するたびに、押したばかりのオブジェクトが1つずつ入った別の配列が表示されます。

解決策は、変数を関数外に取り出して外側スコープに入れることです。詳細は、この関数がモジュール、クラス、またはベアの一部であるかどうかによって異なります。通常、それは次のようになります。

var result: any[] = []; 
drawtimeline(i_items, nom_cal, _hitoService, idcalbuscador) { 
    var container = document.getElementById('timeLine'); 

    result.push({ "_id": this.idcalbuscador, "title": nom_cal }); 
    for (let i of result) { 
     console.log(i); 
     alert(i); 
    } 
} 

あなたがクラスである場合は、あなたが使用する必要がありますthis.result

関連する問題