45

キーが既に存在するかどうかを確認し、存在する場合は値を増やし、存在しない場合は初期値を設定するにはどうすればよいですか?

この疑似コードのようなもの:

var dict = {};
var new_item = "Bill"

If new_item not in dict:
dict[new_item] = 1

else:

dict[new_item] += 1
4

6 に答える 6

138
dict[key] = (dict[key] || 0) + 1;
于 2013-09-09T02:43:56.083 に答える
24

@snak の方法はかなりきれいで、||オペレーターは読みやすさの点でそれを明確にするので、それは良いことです。

完全性と雑学のために、このビット単位の方法も非常に滑らかです。

dict[key] = ~~dict[key] + 1;

これは、数値に強制した後~~に多くの非数値を0変換するため機能します。完全な説明ではないことは承知していますが、いくつかの異なるシナリオで期待できる出力は次のとおりです。

~~(null)
0
~~(undefined)
0
~~(7)
7
~~({})
0
~~("15")
15
于 2016-08-25T22:10:25.807 に答える
3

疑似コードは実際のコードとほぼ同じです。

if (key in object) {
    object[key]++;
} else {
    object[key] = 1;
}

私は通常書いていますが:

if (!(key in object)) {
    object[key] = 0;
}

object[key]++;
于 2013-09-09T02:45:36.570 に答える
3

次のように三項演算子 (?:) を使用できます。

dictionary[key] ? 
    dictionary[key].value += 1 : 
    dictionary[key] = {value: 1};
于 2013-09-09T02:45:46.960 に答える
1

まず、オブジェクトにnew_itemという名前の独自のプロパティがあるかどうかを確認する必要があります。そうでない場合は、追加して値を 1 に設定します。それ以外の場合は、値を増やします。

var dict = {};
var new_item = "Bill"

dict[new_item] = dict.hasOwnProperty(new_item)? ++dict[new_item] : 1;

上記は、プロパティが存在するかのように少し無駄であり、それをインクリメントしてから、新しい値をそれ自体に割り当てます。より長いがおそらくより効率的な代替手段は、プロパティが存在しない場合、ゼロの値を追加してからインクリメントすることです:

if (!dict.hasOwnProperty(new_item)) {
  dict[new_item] = 0;
}
++dict[new_item];
于 2013-09-09T03:16:43.827 に答える
0

これはさまざまな方法で行うことができます。一般に、 にキーがあるかどうかを知りたい場合は、修飾子とキー名Objectを使用します。inこれは次のようになります。

var key = "key name";
var dict = {};
var hasKey = (key in dict);

ただし、値が設定されているかどうかは、単純にテストすることで確認できますundefined。これは、値を初期化せずに if ステートメントを介して送信すると、JavaScript では false として機能します。次のようになります。

var dict = {};
if(dict[key]) {
   print("key: " + dict[key]);
} else {
   print("Missing key");
}
于 2013-09-09T02:52:18.593 に答える