繁体   English   中英

如何增加 JavaScript 对象中的值?

[英]How to increment a value in a JavaScript object?

var map = {};
map[key] = value;

我怎样才能

  • 如果对象中尚不存在键,则分配值 1
  • 如果存在则将值增加 1

我能做得更好吗:

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

在这里,您可以最小化您的代码。

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

最近可能是

map[key] = (map[key] ?? 0) + 1;

空合并运算符

您可以检查对象是否没有特定键并设置它或将现有键值增加一:

 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);

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) 使用对象作为地图有几个缺点,需要谨慎。

你可以像这样使用三元运算符

 map[key] ? map[key]++ : map[key] = 1;

如果将数组的值转换为整数并递增它会更好。 这将是健壮的代码。 默认情况下,数组的值为字符串。 因此,如果您不将其转换为整数,那么它可能无法跨浏览器工作。

if (map[key] == null) map[key] = 0;
map[key] = parseInt(map[key])+1;
function addToMap(map, key, value) {
    if (map.has(key)) {       
        map.set(key, parseInt(map.get(key), 10) + parseInt(value, 10));
    } else {
        map.set(key, parseInt(value, 10));
    }       
}

创建对象:

    tagObject = {};
    tagObject['contentID'] = [];  // adding an entry to the above tagObject
    tagObject['contentTypes'] = []; // same explanation as above
    tagObject['html'] = [];

现在下面是我添加到上面标签对象的出现条目。

ES 2015 标准: function () {}() => {}

          let found = Object.keys(tagObject).find(
                (element) => {
                    return element === matchWithYourValueHere;
                });

          tagObject['occurrences'] = found ? tagObject['occurrences'] + 1 : 1;

这将增加特定对象键的计数..

最短的代码是:

map[key] = ++map[key] || 1

暂无
暂无

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

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