2016-09-20 10 views
3
var map = {}; 
map[key] = value; 

どのようにJavaScriptオブジェクトの値を増やす方法は?

  • 割り当て値1キーは、まだそれが

が存在する場合、私はより良い行うことができます1によってオブジェクト

  • インクリメントの値を存在しない場合、次のことができます。

    if (map[key] == null) map[key] = 0; 
    map[key] = map[key]++; 
    
  • +0

    存在確認のためにif(typeof map [key] === "undefined")を試してください。通常、マップに存在しないものは未定義です。 nullではありません。 – klikas

    +0

    'hasOwnProperty'を使って探しているプロップの存在を確認できませんか? – DavidDomain

    答えて

    2

    ここでコードを最小限に抑えます。

    map[key] = (map[key]+1) || 1 ; 
    
    +1

    "フラグホイスト"とは、 "短絡評価"を意味します。これは吊り上げとは何の関係もありませんが、「旗吊り上げ」は面白い集結です。 – JJJ

    +1

    JavaScriptのフラグホイストプロパティを持たない。いわゆる「短絡評価」は使用できません。最終的には、同じ概念を利​​用しています。 – ricky

    +0

    あなたはそれを可変ホイストと呼ぶことができます。 – ricky

    0

    配列の値を整数に変換してインクリメントするとよいでしょう。堅牢なコードになります。 デフォルトでは、配列の値は文字列です。したがって、整数に変換しない場合は、クロスブラウザでは機能しない可能性があります。

    if (map[key] == null) map[key] = 0; 
    map[key] = parseInt(map[key])+1; 
    
    +1

    'parseInt(未定義)'はNaNです。 – JJJ

    +1

    あなたはまた、キーの値を宣言しましたか? – nirmal

    +0

    また、「デフォルトの配列の値は文字列です」はちょうどゴミであり、質問には配列がありません。 – JJJ

    4

    オブジェクトが特定のキーを持って、それを設定するか、いずれかによって、既存のキーの値を増加させない場合は、チェックすることができます。

    function assignKey(obj, key) { 
     
        typeof obj[key] === 'undefined' ? obj[key] = 1 : obj[key]++; 
     
    } 
     
    
     
    var map = {}; 
     
    
     
    assignKey(map, 2); 
     
    assignKey(map, 2); 
     
    assignKey(map, 4); 
     
    assignKey(map, 1); 
     
    assignKey(map, 2); 
     
    assignKey(map, 5); 
     
    assignKey(map, 1); 
     
    console.log(map);

    1

    ES6は、専用のクラスを提供します地図、Map。あなたは簡単に「既定値にマップ」を構築し、それを拡張することができます

    class DefaultMap extends Map { 
     
    
     
        constructor(defVal, iterable=[]) { 
     
         super(iterable); 
     
         this.defVal = defVal; 
     
        } 
     
    
     
        get(key) { 
     
         if(!this.has(key)) 
     
          this.set(key, this.defVal); 
     
         return super.get(key); 
     
        } 
     
    } 
     
    
     
    m = new DefaultMap(9); 
     
    console.log(m.get('foo')); 
     
    m.set('foo', m.get('foo') + 1); 
     
    console.log(m.get('foo'))

    (AB)使用してオブジェクトをマップでは、いくつかの欠点を持っていたし、いくつかの注意を必要とします。

    関連する問題