繁体   English   中英

如果 object 属性值存在,如何增加它,否则设置初始值?

[英]How to increment an object property value if it exists, else set the initial value?

我如何添加检查以查看键是否已存在,如果存在,则增加值,如果不存在,则设置初始值?

像这样的伪代码:

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

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

else:

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

@snak 的方式非常干净,而且|| 运算符在可读性方面使其显而易见,所以这很好。

为了完整性和琐事,这种按位方式也非常巧妙:

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

这是有效的,因为~~在强制转换为数字后会将许多非数字的东西变成0 我知道这不是一个非常完整的解释,但这里是一些不同场景的输出:

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

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

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

虽然我通常写:

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

object[key]++;

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

dictionary[key] ? 
    dictionary[key].value += 1 : 
    dictionary[key] = {value: 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];

您可以通过多种方式做到这一点。 一般来说,如果你想知道一个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");
}

如果值存在则 (prev value + 1) 或设置初始值 1。

const obj = {};

addToObj = key =>{
// Using ternary operator
obj[key] = obj[key] ? (obj[key] + 1) : 1;
}

addToObj('alex');
addToObj('adam');
addToObj('maria');
addToObj('maria');
addToObj('alex');
addToObj('john');
addToObj('jack');
addToObj('rock');
console.log(obj);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM