2017-03-31 7 views
0

私は現在このコードを持っています。ここで、speciesMapはキーにマップを値として持つマップです。Mapオブジェクトの値を簡単に増やす方法はありますか?

var speciesMap = new Map(); 
... 
if(!speciesMap.get(species)) { 
    let obj = new Map(); 
    obj.set('count', 0); 
    obj.set('vol', 0); 
    speciesMap.set(species, obj); 
} 

私は1によって与えられた種の数を増やすことをお勧めしますが、私はそれを行うために見つけた唯一の方法は、このようなものでした。

speciesMap.get(species).set('count', speciesMap.get(species).get('count') + 1); 

地図をもう一度ダウンして値を取得するのではなく、値を増やす方法がありますか?同じボリュームになる、私はオブジェクトを下に移動し、それに+ volを追加する必要があります。

は明らかに動作しません

speciesMap.get(species).set('count', this+1); 

のようなものを望んでいました。

あなたは可変数のクラスを導入し、代わりに裸の数字で、そのクラスのインスタンスを使用することができますBergiの答え@

+0

なり? – Bergi

+0

以前はjavascriptで動的キーを使用していなかったので、この機能を使いこなしていましたが、拒否されました。しかし、 'obj'はオブジェクトにすることができます。コードから 'get()'を削除します。 – hitsugan

+0

はい、ちょうど 'specialMap.get(species).count ++;' :-) – Bergi

答えて

1

あなたはヘルパー関数を使用することができます。

function update(map, key, callback) { 
    map.set(key, callback(map.get(key))); 
} 

は、その後、あなたの長い表現は、私はあなたがどこでも、動的キーを使用していないとき `obj`は、オブジェクトではなく、` Map`する必要があります推測

update(speciesMap.get(species), 'count', v => v+1); 
+0

私はまだES6太鼓の機能に慣れていますが、これは意味があり、簡潔です。ありがとう。 – hitsugan

0

は結構ですが、それは金曜日なので...:

class Int { 
 

 
    constructor(n) { 
 
     this.n = n; 
 
    } 
 

 
    toString() { 
 
     return String(this.n); 
 
    } 
 

 
    valueOf() { 
 
     return this.n; 
 
    } 
 

 
    add(m) { 
 
     this.n += m; 
 
     return this; 
 
    } 
 
} 
 

 

 
let speciesMap = new Map(); 
 
speciesMap.set('elefant', new Map([ 
 
    ['count', new Int(0)], 
 
    ['vol', new Int(0)] 
 
])); 
 

 
speciesMap.get('elefant').get('count').add(1); 
 

 
alert('count is now ' + speciesMap.get('elefant').get('count'));

+0

私は実際には数字(+1と+ var)を操作する必要があったので、Bergiのanwserはややシンプルですが、これは便利なヒントですクラス。 +1はいつも素晴らしいです。ありがとう。 – hitsugan

+0

可変番号?シャダー。むしろ不変のマップを作ることができます:D – Bergi

関連する問題