代码之家  ›  专栏  ›  技术社区  ›  Matt Ball

将多个键映射到JavaScript哈希中的同一个值

  •  1
  • Matt Ball  · 技术社区  · 15 年前

    我使用一个javascript散列对象来存储一组数值计数器,设置如下[这大大简化了]:

    var myHash = {
        A: 0,
        B: 0,
        C: 0
    };
    

    有没有一种方法可以生成其他键,而不是在 myHash ,映射到键?例如,我希望[再次,这是简化的]:

    myHash['A_prime']++; // or myHash.A_prime++;
    

    完全等同于

    myHash['A']++; // or myHash.A++;
    

    例如,增加在键上找到的值 A 不是 A_prime .

    5 回复  |  直到 14 年前
        1
  •  1
  •   Zach    14 年前

    假设此哈希中没有任何有效的字符串值,您可以在哈希本身中创建自己的键到其他键的映射,并将键/值对包装到自己的函数中,如下所示:

    var hash = {
        A: 0,
        B: 0,
        C: 0,
        A_asdf: 'A',
        B_asdf: 'B',
        A_another: 'A'
    }
    
    function increment(key)
    {
        // iteratively find the real key
        while (typeof(hash[key]) == 'string')
        {
            key = hash[key];
        }
        hash[key]++;
    }
    
        2
  •  1
  •   Pindatjuh    15 年前

    解决此问题的一种方法是将所有值包装在一个对象中,并在多个键中使用此对象。

    var myHash = {
        A: {value: 0},
        ...
    };
    
    myHash['A_prime'] = myHash['A'];
    myHash['A_prime'].value++;
    
        3
  •  0
  •   branchgabriel    15 年前

    我认为您最好编写一个函数来完成一个哈希数组或多个哈希数组的增量,这取决于您要完成的任务。我可能没有正确理解这个问题,但这是我的解决办法。

    var smallHash = { 
        A: 0, 
        B: 0, 
        C: 0,
        A_prime:'A',
        B_prime:'B',
        C_prime:'C'
    }; 
    
    function incrementPrime(myHash,key)
    {
      letterKey = myHash[key];
      myHash[letterKey]++;
    }
    
    incrementPrime(smallHash,'C_prime');
    
    alert("C is now: "+smallHash['C']); // should return 1
    
        4
  •  0
  •   Mic    15 年前

    可以对键执行操作,而不是对哈希执行操作:

    var myHash = {
        A: 0,
        B: 0,
        C: 0
    };
    function incr(prop){
        myHash[prop[0]]++;
    }
    incr('A');
    incr('A_asdf');
    

    功能 incr 可能是您要应用于哈希的任何其他内容。

        5
  •  -1
  •   roufamatic RichardJohnn    15 年前

    如前所述,不。如果您可以更改对象的键,尽管您会更接近:

    var x = new Object();
    var y = x;
    
    myHash[x] = 1;
    myHash[y]++;  // should increment the value since y is x.