2016-09-20 50 views
3
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

回答

2

在這裏你可以儘量減少你的代碼。

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

「旗吊」是指「短路評估」。這與吊裝沒有任何關係,雖然「吊裝」是一種有趣的混合。 – JJJ

+1

在JavaScript中沒有標誌提升屬性。你不能使用所謂的「短路評估」。最終,它利用相同的概念。 – ricky

+0

你可以稱之爲變量提升。 – ricky

0

如果將數組的值轉換爲整數並將其增大,那將會更好。這將是健壯的代碼。 默認情況下,數組的值是字符串。所以如果你不把它轉換成整數,那麼它可能無法跨越瀏覽器。

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

'parseInt(undefined)'是NaN。 – JJJ

+1

你是否還聲明過鍵值? – nirmal

+0

另外,「缺省情況下,數組的值是字符串」只是垃圾,並且在問題中沒有數組。 – JJJ

4

您可以檢查對象不具有特定的鑰匙,並將其設置或由一個提高現有鍵值:

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

1

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),使用對象爲地圖有幾個缺點,需要一些謹慎。

相關問題