Javascript对象增量项(如果不存在)

时间:2013-09-09 02:41:29

标签: javascript

有没有标准的方法来做到这一点?我知道如何在Python中但是在Javascript中最好的方法是通过首先检查密钥是否已经存在来向字典添加密钥,如果没有,则添加值为1,如果它存在则只增加当前计数。

像这样的伪代码:

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

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

else:

dict[new_item] += 1

6 个答案:

答案 0 :(得分:95)

这个怎么样?

dict[key] = (dict[key] || 0) + 1;

答案 1 :(得分:12)

@ snak的方式非常干净,||运算符在可读性方面表现得很明显,所以这很好。

对于完整性和琐事,这种按位方式非常流畅:

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

这是有效的,因为~~会在强制转换为数字后将许多非数字事物转换为0。我知道这不是一个非常完整的解释,但这里有一些不同场景可以预期的输出:

~~(null)
0
~~(undefined)
0
~~(7)
7
~~({})
0
~~("15")
15

答案 2 :(得分:4)

您的伪代码几乎与实际代码相同:

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

虽然我经常写:

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

object[key]++;

答案 3 :(得分:3)

你可以像这样使用三元运算符(?:):

dictionary[key] ? 
    dictionary[key].value += 1 : 
    dictionary[key] = {value: 1};

答案 4 :(得分: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];

答案 5 :(得分:0)

你可以通过很多方式实现这一目标。通常,如果您想知道Object是否有密钥,请使用带有密钥名称的in修饰符。这看起来像:

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

虽然您可以通过简单测试是否undefined来检查是否设置了值。这是在JavaScript中,如果您没有初始化值并通过if语句发送它将作为false。看起来像:

var dict = {};
if(dict["key"]) {
   print("key: " + dict[key]);
} else {
   print("Missing key");
}