将多个键映射到Javascript哈希中的相同值

时间:2010-03-24 21:20:31

标签: javascript hash associative-array

我使用Javascript哈希对象来存储一组数字计数器,设置如下[这大大简化]:

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

有没有办法让其他键(myHash中没有显式的键)映射到键?例如,我想[再次,这是简化]:

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

完全等同于

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

e.g。递增在键A找到的值,而不是A_prime

5 个答案:

答案 0 :(得分:1)

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

var myHash = {
    A: {value: 0},
    ...
};

myHash['A_prime'] = myHash['A'];
myHash['A_prime'].value++;

答案 1 :(得分:1)

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

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 :(得分:0)

我认为你最好只编写一个函数来完成一个哈希数组或多个哈希数组的增量,这取决于你想要完成的事情。我可能没有正确理解这个问题,但这是我的解决方案。

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

答案 3 :(得分:0)

您可以对密钥执行操作,而不是哈希:

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

函数incr可以是您想要应用于散列的任何其他内容。

答案 4 :(得分:-1)

如上所述,没有。如果您可以将关键点更改为对象,则可以接近:

var x = new Object();
var y = x;

myHash[x] = 1;
myHash[y]++;  // should increment the value since y is x.