如何增加JavaScript对象中的值?

问题描述:

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

我怎样才能如何增加JavaScript对象中的值?

  • 分配值,如果关键还不在对象
  • 递增1,如果它存在

我可以做的比更好的价值存在1:

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

尝试if(typeof map [key] ===“undefined”)检查是否存在。通常情况下,你的地图中不存在的东西将是未定义的。不为null。 – klikas

+0

难道你不能只用'hasOwnProperty'来检查你正在寻找的道具的存在吗? – DavidDomain

在这里你可以尽量减少你的代码。

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

“旗吊”是指“短路评估”。这与吊装没有任何关系,虽然“吊装”是一种有趣的混合。 – JJJ

+1

在JavaScript中没有标志提升属性。你不能使用所谓的“短路评估”。最终,它利用相同的概念。 – ricky

+0

你可以称之为变量提升。 – ricky

如果将数组的值转换为整数并将其增大,那将会更好。这将是健壮的代码。 默认情况下,数组的值是字符串。所以如果你不把它转换成整数,那么它可能无法跨越浏览器。

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

'parseInt(undefined)'是NaN。 – JJJ

+1

你是否还声明过键值? – nirmal

+0

另外,“缺省情况下,数组的值是字符串”只是垃圾,并且在问题中没有数组。 – JJJ

您可以检查对象不具有特定的钥匙,并将其设置或由一个提高现有键值:

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