0

I have a dynamic property name that I would like to use as a key and achieve something like this:

obj Map(KeyName)++;

Meaning, add 1 to a value stored under a Key "KeyName". But this syntax does not work.

So I would expect that after calling the code three times, Map(KeyName) would return 3.

John V
  • 4,855
  • 15
  • 39
  • 63

4 Answers4

1

const obj = {}

function increment(keyName) {
  obj[keyName] = obj[keyName] || 0;
  obj[keyName]++;
}

increment('keyName')
increment('keyName')
increment('keyName')

console.log(obj)
Callam
  • 11,409
  • 2
  • 34
  • 32
1

Probably you are using the Javascript Map type. So, you can do something like:

var myMap = new Map();

myMap.set("integerA", 0);
myMap.set("integerB", 0);
myMap.set("integerC", 0);

var key = "integerB";
myMap.set(key, myMap.get(key) + 1);
myMap.set(key, myMap.get(key) + 1);
myMap.set(key, myMap.get(key) + 1);

/* { "integerA" => 0, "integerB" => 3, "integerC" => 0 } */

var key = "integerC";
myMap.set(key, myMap.get(key) + 1);
myMap.set(key, myMap.get(key) + 1);
myMap.set(key, myMap.get(key) + 1);

/* { "integerA" => 0, "integerB" => 3, "integerC" => 3 } */

If you need a function, it would be:

function increment(map, key) {
    map.set(key, map.get(key) + 1);
    return map;
}
Purport Tees
  • 464
  • 2
  • 4
  • 12
0

Your question is not clear, but here is an example that might provide the right syntax for you:

var keyNameF = "foo"
var keyNameB = "bar"
var objMap  = {
  foo: 10,
  bar: 20
}

objMap[keyNameF]++
objMap[heyNameB]++

console.log(objMap)

Hope that's what you are looking for.

Blunt Jackson
  • 616
  • 4
  • 17
0

Wrap an object into function and call the increment inc multiple times on different keys and then print the value using get method.

function DynamicKey(){

   var keys = {};

   var _obj = {
     inc:function(key){
        if(!keys.hasOwnProperty(key)){
            keys[key] = 0;
        }
        keys[key] += 1;
        return _obj;
     },
     get:function(key){
       return keys[key];
     }
   }
   return _obj;
}

var d = DynamicKey();
d.inc('key1').inc('key1').inc('key2').inc('key3').inc('key1').inc('key2');
console.log("key1 count => ", d.get('key1')); // 3
console.log("key2 count => ", d.get('key2')); // 2
console.log("key3 count => ", d.get('key3')); //  1

jsFiddle demo - https://jsfiddle.net/4qmjofvk/1/

front_end_dev
  • 1,998
  • 1
  • 9
  • 14