微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JS:在多层对象

如何解决JS:在多层对象

我试图从通用变量名称(如“Mike”)中引用变量值 以及一个明确的变量名称,如“myNeighbor_Mike_age”。

数据库条目带有作为名称的 ID,例如:

dbObject =
   {
   MyNeighbor_Mike_age:21,MyFriend_Thomas_age:404,MyNeighbor_Nik_age:30
   }
]

我想要一个通用结构,以便我可以为例如编写函数我可能有多个myNeighbor-objectType(例如:“closeNeighbor”;“neighborNextStreat”):

newPersonObject =
{
   "myNeighbor":{
      "Mike":
         {"age":null},{"ID":MyNeighbor_Mike_age},"Nik":
         {"age":null}
         {"ID":MyNeighbor_Nik_age},}
   "myFriend":{
      "Thomas":
         {"age":null}
         {"ID":MyFriend_Thomas_age},}
}

我正在寻找一种方法dbObject 名称链接newPersonObject 的对应对象。所以我只做了一次“链接工作”,然后就可以使用全名(即作为链接函数名称的一部分)来设置值。

我想我可以在主对象中引用它,例如:

   newPersonObject.myNeighbor.Mike.age = dbObject.MyNeighbor_Mike_age

在程序中,我使用计算属性来动态设置值,使其看起来更像这样:


peopleType = Object.keys(newPersonObject)[0]
name = Object.keys(newPersonObject[peopleType][0])
// used a for(-of)-loop but for simplicity 
newPersonObject[peopleType][name]["age"] = dbObject[newPersonObject[peopleType][name].ID]

这样我就可以访问变量而无需解析 DB 变量名(运行时和硬件资源)。 即

newPersonObject[MyNeighbor_Mike_age] = dbObject[MyNeighbor_Mike_age] // =21
// and have also set newPersonObject.myNeighbor.Mike.age to 21

但是没有用。

我想出了以下我认为不是最佳的“解决方案”,BC。我必须调用一个函数调用似乎违反直觉

newPersonObject.<variableName>(xxx) to set a value:
newPersonObject[personObject.ID] = function(ageValue){
   this[typeOfPerson][name].value = ageValue; 
};

我目前通过这样的循环设置值:


for(let objectKey of Object.keys(dbObject)){   
    newPersonObject[objectKey ](dbArray[objectKey])
    //objectKey should return 
    //MyNeighbor_Mike_age
    //myFriend_Thomas_age
    //MyNeighbor_Nik_age
}

我使用的是 Node-Red,所以我最好不要添加额外的包或使用全局变量

知道如何收拾东西吗?

提前致谢

解决方法

好吧,看来我把事情复杂化了。 正如@Bergi 指出的,以下内容更有用: 而不是引用值,我现在只是对相关属性进行循环

// for each group like "neighbor";"friend"
for(let peopleType in newPersonObject){
   //for each name like "Mike" "Nik" "Thomas"
   for(let name in newPersonObject[peopleType]){
           let unambiguousID = newPersonObject[peopleType][name].ID
           newPersonObject[peopleType][name].age= dbObject[unambiguousID];
       }
}

这比加入自定义功能更容易、更简洁,就像我的第一个想法。 到目前为止,性能影响看起来并不极端,也不显着 从 1-3 ms 到 1-4 ms 到目前为止,5 种类型的 1000 人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?