将多个键映射到Javascript哈希中的相同值
我使用Javascript散列对象存储一组数字计数器,设置如下[这大大简化]:将多个键映射到Javascript哈希中的相同值,javascript,hash,associative-array,Javascript,Hash,Associative Array,我使用Javascript散列对象存储一组数字计数器,设置如下[这大大简化]: var myHash = { A: 0, B: 0, C: 0 }; myHash['A_prime']++; // or myHash.A_prime++; 有没有办法使其他键(在myHash中未明确显示的键)映射到?例如,我想[再次,这是简化的]: var myHash = { A: 0, B: 0, C: 0 }; myHash['A_prime']++;
var myHash = {
A: 0,
B: 0,
C: 0
};
myHash['A_prime']++; // or myHash.A_prime++;
有没有办法使其他键(在myHash
中未明确显示的键)映射到?例如,我想[再次,这是简化的]:
var myHash = {
A: 0,
B: 0,
C: 0
};
myHash['A_prime']++; // or myHash.A_prime++;
完全等同于
myHash['A']++; // or myHash.A++;
e、 g.增加在键
A
处找到的值,而不是A_prime
解决此问题的方法是将所有值包装在一个对象中,并在多个键中使用此对象
var myHash = {
A: {value: 0},
...
};
myHash['A_prime'] = myHash['A'];
myHash['A_prime'].value++;
如上所述,否。如果您可以将关键点更改为对象,尽管您会更靠近:
var x = new Object();
var y = x;
myHash[x] = 1;
myHash[y]++; // should increment the value since y is x.
我认为您最好只编写一个函数来完成一个哈希数组或多个哈希数组的递增,这取决于您试图完成的内容。我可能没有正确理解这个问题,但这是我的解决办法
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
您可以对密钥而不是哈希进行操作:
var myHash = {
A: 0,
B: 0,
C: 0
};
function incr(prop){
myHash[prop[0]]++;
}
incr('A');
incr('A_asdf');
函数
incr
可以是要应用于散列的任何其他函数。假设此散列中没有任何有效的字符串值,可以在散列本身中创建自己的键到其他键的映射,并将键/值对包装在自己的函数中,如下所示:
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]++;
}
JavaScript不能将对象作为键保存,只能保存字符串。
myHash
对象将以名为“[对象对象]”
的属性结尾,因为[]
属性访问器操作符将x
和y
转换为字符串。我可以控制哈希,但不能控制键。我的问题是,考虑到我的密钥的限制,我是否可以做我想做的。每天学习新的东西。虽然我最终不需要实现这样的东西,但我接受你的答案,因为它对我来说似乎是最干净、最灵活的。我喜欢这个想法,就像在散列中创建一组变量一样。。这很容易成为一门课