Как я могу увеличить значение под динамическим ключом? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть динамическое имя свойства, которое я хотел бы использовать в качестве ключа и получить что-то вроде этого:

obj Map(KeyName)++;

То есть добавить 1 к значению, хранящемуся под ключом «KeyName».Но этот синтаксис не работает.

Так что я ожидаю, что после трехкратного вызова кода Map (KeyName) вернет 3.

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

Обернуть объект в функцию и вызвать приращение inc несколько раз на разных клавишах, а затем распечатать значение, используя метод get.

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/

0 голосов
/ 12 ноября 2018

Ваш вопрос неясен, но вот пример, который может предоставить вам правильный синтаксис:

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

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

console.log(objMap)

Надеюсь, это то, что вы ищете.

0 голосов
/ 12 ноября 2018

Возможно, вы используете тип карты Javascript. Итак, вы можете сделать что-то вроде:

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 } */

Если вам нужна функция, это будет:

function increment(map, key) {
    map.set(key, map.get(key) + 1);
    return map;
}
0 голосов
/ 12 ноября 2018

const obj = {}

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

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

console.log(obj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...