如何增加JavaScript对象中的值?

mem*_*und 11 javascript

var map = {};
map[key] = value;
Run Code Online (Sandbox Code Playgroud)

我怎么能够

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

我可以做得比:

if (map[key] == null) map[key] = 0;
map[key] = map[key]++;
Run Code Online (Sandbox Code Playgroud)

ric*_*cky 19

在这里,您将最小化您的代码.

map[key] = (map[key]+1) || 1 ;
Run Code Online (Sandbox Code Playgroud)

  • "旗帜吊装"是指"短路评估".这与吊装没有任何关系,虽然"悬挂旗帜"是一种有趣的混合. (2认同)
  • 根本没有涉及你的代码的吊装. (2认同)

kaw*_*uso 8

最近可能是

map[key] = (map[key] ?? 0) + 1;
Run Code Online (Sandbox Code Playgroud)

空合并运算符


Ale*_*har 6

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

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);
Run Code Online (Sandbox Code Playgroud)


geo*_*org 5

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'))
Run Code Online (Sandbox Code Playgroud)

(Ab)使用对象作为地图有几个缺点,需要小心。