2015-09-17 29 views

回答

0

想通了。 JS哈希使用toString()作为键。例如这个工程:

function Obj() { 
    var str = "" + Math.random(); 
    this.toString = function() { 
    return str; 
    } 
} 
var a = new Obj(); 
var b = new Obj(); 
var hash = {}; 
hash[a] = 1; 
hash[b] = 2; 
console.log(hash[a]); // 1 
console.log(hash[b]); // 2 
console.log(a == b); // false 
+0

是的,你可以通过执行'for(var i in hash)console.log(typeof i);'< - outputs'string' – Jan

+0

你可能会喜欢新的符号JS即将发布...... – dandavis

0

你的对象类和数组键混合。

function Obj() {}  //create Obj object 
var a = new Obj();  //a is instance Obj object 
var b = new Obj();  //b is instance Obj object 
var hash = {};   //create hash object 
hash[a] = 1;   //its not create key array in hash object - hash{[{a}]:1} 
hash[b] = 2;   // hash{[{b}]:2} 
//hash = {[Object Object]:2} 
console.log(hash[a]); //its return last assign value - 2 
console.log(hash[b]); //2 

对象分配密钥无效

简单的事情是

function Obj() {} 
var a = new Obj(); 
var b = new Obj(); 
a={"name":"David"}; 
b={"name":"Naest"}; 
var hash = {}; 
hash[0] = a; 
console.log(hash[0].name); //David 
hash[1] = b; 
console.log(hash[1].name); //Naest 

如果u要覆盖对象键作为另一个对象键

function Hash(){ 
var hash = new Object(); 
this.put = function(key, value){ 
    if(typeof key === "string"){ 
     hash[key] = value; 
    } 
    else{ 
     if(key._hashtableUniqueId == undefined){ 
      key._hashtableUniqueId = UniqueId.prototype.genarateId(); 
     } 
     hash[key._hashtableUniqueId] = value; 
    } 

}; 

this.get = function(key){ 
    if(typeof key === "string"){ 
     return hash[key]; 
    } 
    if(key._hashtableUniqueId == undefined){ 
     return undefined; 
    } 
    return hash[key._hashtableUniqueId]; 
}; 
} 

function UniqueId(){ 

} 

UniqueId.prototype._id = 0; 
UniqueId.prototype.genarateId = function(){ 
return (++UniqueId.prototype._id).toString(); 
}; 

使用

function Obj() {} 
var a = new Obj(); 
var b = new Obj(); 

var hash = new Hash(); 
hash.put(a,1); 
hash.put(b,2); 
console.log(hash.get(a)); //1 
相关问题