【问题标题】:JavaScript: How do I add a custom class object as a key of an arrayJavaScript:如何添加自定义类对象作为数组的键
【发布时间】:2021-08-01 08:13:50
【问题描述】:

我创建了一个具有“名称”属性的自定义类

我还在类中添加了一个函数,如果 2 个对象具有相同的名称,则该函数返回 true。当我比较 2 个具有相同名称的自定义对象时,此功能有效。

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

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

我的类构造函数:

class node {
  constructor(name) {
    this.name = name;
  }
  getname() {
    return this.name;
  }
  equiv(other) {
    return Boolean(this.name == other.name);
  }
  inarray(array) {
    for (let key in array) {
      if (this.name== key.name)
      {
        return true;
      }
    }
    return false;
  }
}

var a = new node("assss");
var b = new node("bssss");
var a2 = new node("assss");

var c = {a:1, b:2}

console.log( a.equiv(a2) ) // true
//But
console.log( a.inarray(c) ) // false

a.equiv(a2) 返回true
但是
a.inarray(c) 返回false

^这是我的问题

【问题讨论】:

    标签: javascript arrays class object key


    【解决方案1】:

    因为你已经更新了你的问题:

    只是替换

    if (this.name == key.name)
    

    通过

    if (this.name == key)
    

    因为key 是一个字符串(不是对象),它的值是'a''b'
    它们是 { a:1, b:2 }

    的键

    class node {
      constructor(name) {
        this.name = name;
      }
      getname() {
        return this.name;
      }
      equiv(other) {
        return Boolean(this.name == other.name);
      }
      inarray(array) {
        for (let key in array) {
          if (this.name == key)
          {
            return true;
          }
        }
        return false;
      }
    }
    
    var a  = new node("a")
      , b  = new node("b")
      , a2 = new node("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,不,在这段代码中,key 的值始终是 'name',而永远不会是 'a''b',因为 this.name 可能是
    • 我同意你的说法,但你的测试是在另一个节点实例上进行的(我认为 OP 在那里犯了错误)。如果您检查 OP 代码,您可以看到“c”变量是一个键名为“a”和“b”的对象。虽然我只会使用 "Object.keys(array).includes(this.name)" 但是,如果它是一个字符串数组,如 ["a,", "b"] 而不是对象,那么你可以正确使用数组[键]。
    • 我已经更改了测试,打错了哎呀。 @Zion Ay,数组中的键不也是节点吗?那么我不需要检查 this.name 是否与 key.name 相同吗?我不确定存储在数组中的键是否保留为节点
    • 经过更多的测试,我意识到key是作为变量名存储的。键字面上是“a”和“b”
    猜你喜欢
    • 2012-05-11
    • 2011-06-21
    • 1970-01-01
    • 2019-09-13
    • 2021-02-11
    • 2022-12-28
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多