2016-06-28 4 views
-1

こんにちは私は屈折計私のコードをしたい。 私はこのサンプルオブジェクトを持っている:私はこのaddYear機能を入れて、私はそれが動作していなかった。このような 何かしようとすると、オブジェクトに彼女を宣言することができますどのようにどのようにJavaScriptのオブジェクトでマップの匿名関数を作成しないでください

class Obj { 
    constructor(){ 
     this.data = [ 
     {'name':'Tom','age':23}, 
     {'name':'John','age':30}, 
     {'name':'Filip','age':32}, 
    ]; 
     this.init(); 
    } 
    init() { 
     this.newData = this.data.map(function addYear(person) { 
      person.age= person.age + 1; 
      return person; 
      }); 
     } 
} 

class Obj { 
    //...... old code.... 
addYear(person){ 
    person.age= person.age + 1; 
    return person; 
} 
init() { 
    this.newData = this.data.map(this.addYear(person)); // this doesn't work 
} 
} 

がいくつかあります方法はどのようにこれを実現する?ありとあらゆる

+0

最初に「.map()」を使う必要はありません。あなたは元のオブジェクトを突然変異させてから、それらを同じオブジェクトの新しい配列に置き換えています。同様に '.forEach()'を使い、 'return person;'と 'this.newData ='を削除してください。 –

+2

クラスのメソッドは、通常、 'init()'が 'this.data'でどのように動作するかなど、クラスのいくつかのメンバで動作します。これが 'person'オブジェクトのためのユーティリティであるならば、それは静的メソッドでなければならないかもしれません。あるいは、 'addYear'メソッドを持つ' Person'クラスを持つべきでしょう。 –

答えて

0

.mapオブジェクトをobject => objectと呼ぶ必要があります。各機能に戻りデータがあることを確認してください。

class Obj { 
    constructor(){ 
     this.data = [ 
     {'name':'Tom','age':23}, 
     {'name':'John','age':30}, 
     {'name':'Filip','age':32}, 
    ]; 
     return this.init(); 
    } 
init() { 
     this.newData = this.data.map(person => this.addYear(person)); 
     return this.newData; 
} 

addYear(person){ 
    person.age= person.age + 1; 
    return person; 
} 
} 
console.log(new Obj()); 
//result  
0: Object 
     age:24 
     name:"Tom" 
1: Object 
     age:31 
     name:"John" 
2: Object 
     age:33 
     name:"Filip" 
+0

ありがとうございます。あなたはなぜコンストラクターにreturn statmentを置いていますか? – Grund

+0

リターンを入れないと、古いオブジェクトと更新オブジェクトが得られます!ちょうどあなたに依存する –

+0

私はそれをありがとう、たくさん持っている; – Grund

関連する問題