JavaScript:如何添加自定义类对象作为数组的键

JavaScript:如何添加自定义类对象作为数组的键,javascript,arrays,class,object,key,Javascript,Arrays,Class,Object,Key,我创建了一个属性为“name”的自定义类 我还向类中添加了一个函数,如果两个对象具有相同的名称,该函数将返回true。当我比较两个具有相同名称的自定义对象时,此函数起作用 但是,当我将这些自定义类对象添加为数组/对象中的键时,我会遇到问题 假设我的自定义类对象是a。它也是数组中的一个键。当我将a与数组中的键进行比较时,我得到a不在数组中 我的类构造函数: 类节点{ 建造师(姓名){ this.name=名称; } getname(){ 返回此.name; } 同等(其他){ 返回布尔值(thi

我创建了一个属性为“name”的自定义类

我还向类中添加了一个函数,如果两个对象具有相同的名称,该函数将返回true。当我比较两个具有相同名称的自定义对象时,此函数起作用

但是,当我将这些自定义类对象添加为数组/对象中的键时,我会遇到问题

假设我的自定义类对象是a。它也是数组中的一个键。当我将a与数组中的键进行比较时,我得到a不在数组中

我的类构造函数:

类节点{
建造师(姓名){
this.name=名称;
}
getname(){
返回此.name;
}
同等(其他){
返回布尔值(this.name==other.name);
}
inarray(阵列){
for(让键入数组){
if(this.name==key.name)
{
返回true;
}
}
返回false;
}
}
var a=新节点(“ASSS”);
var b=新节点(“bssss”);
var a2=新节点(“ASSS”);
var c={a:1,b:2}
console.log(a.equiv(a2))//true
//但是
console.log(a.inarray(c))//false
既然你已经适应了你的问题:

替换

if (this.name == key.name)

因为
是一个字符串(不是对象),它的值是
'a'
'b'

它们是{a:1,b:2}的键

类节点{
建造师(姓名){
this.name=名称;
}
getname(){
返回此.name;
}
同等(其他){
返回布尔值(this.name==other.name);
}
inarray(阵列){
for(让键入数组){
if(this.name==key)
{
返回true;
}
}
返回false;
}
}
var a=新节点(“a”)
,b=新节点(“b”)
,a2=新节点(“a”)
,c={a:1,b:2}
;
console.log(a.equiv(a2))//true

console.log(a.inarray(c))//true
它应该是“this.name==key”,因为您需要的是键名,而不是键值。我相信他写的测试是错误的,应该是“console.log(a.inarray(c))@ZionAy,不,在这段代码中,
键的值总是
'name'
,而决不会
'a'
'b'
,因为
这个名称可能与您所说的一致,但您的测试是在另一个节点实例上进行的(我认为OP犯了错误)。如果你检查OP代码,你可以看到“c”变量是一个键名为“a”和“b”的对象。虽然我只会使用“object.keys(array).includes(this.name)”但是,如果它是一个字符串数组,比如[“a”,“b”],而不是一个对象,那么你就可以使用array[key]。我更改了测试,输入了一个拼写错误。@Zion-Ay,数组中的键不也是节点吗?那么我不必检查this.name是否与key.name相同吗?我不确定数组中存储的键是否保持为节点。在进行更多测试后,我意识到这些键是作为变量的名称存储的。这些键字面上是“a”和“a”“b”
if (this.name == key)