【问题标题】:referencing object inside another object javascript在另一个对象javascript中引用对象
【发布时间】:2015-03-04 19:34:23
【问题描述】:

所以我有两组不同的对象:

var house = {};
house["01"] = {hID: "01", neighbh: "00001", name: "house 1"};
house["02"] = {hID: "02", neighbh: "00001", name: "house 2"};
house["03"] = {hID: "03", neighbh: "00002", name: "house 3"};
house["04"] = {hID: "04", neighbh: "00003", name: "house 4"};

var neighborhood = {};
neighborhood["00001"] = {id: "00001", name: "first neighborhood", houses: {} };
neighborhood["00002"] = {id: "00002", name: "second neighborhood", houses: {} };
neighborhood["00003"] = {id: "00003", name: "third neighborhood", houses: {} };

我希望能够引用社区内房屋 {} 内的房屋对象。但是将它们过滤到各自的社区。即 house["01"] 应该去邻里 ["00001"] (那些邻里 id 匹配 house neighbh 的人)。这样我就可以将所有房屋放在一个不同的对象中,但仍然可以通过邻域对象对它们进行更改。希望我已经设法让自己说清楚了。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 您能澄清一下您要做什么吗?特别是,我不明白这句话:“但将它们过滤到各自的邻居。即房子[“01”]应该进入邻居[“00001”](那些邻居ID与房子neighbh匹配的人)。”
  • 举个例子,house["01] (有一个 neibh 为 00001) 因为那个 id (per say) 匹配邻居 id ["00001"] 它应该在那个里面被引用,这样解释更好吗?

标签: javascript object reference pass-by-reference


【解决方案1】:

Javascript 中的对象是通过引用传递和存储的。所以,假设你有一个所有房屋的主阵列:

var houses = [
    {hID: "01", neighbh: "00001", name: "house 1"},
    {hID: "02", neighbh: "00001", name: "house 2"}
];

然后,您有一组邻域对象,每个对象都有一些关于邻域的识别信息,然后是该邻域内的房屋列表:

var neighborhoods = [
    {id: "00001", name: "first neighborhood", houses: [houses[0], houses[1]]} 
];

在这样的结构中,每个房屋对象只有一个副本。您可以通过您拥有的任何参考资料对其进行修改。因此,您可以通过主房屋数组对其进行修改。或者,您可以通过社区内的房屋数组对其进行修改。每个都指向完全相同的房屋对象。因此,当您在一处修改它时,您正在修改实际的房屋对象,并且引用该特定房屋对象的每个人都会看到这些修改。


所以,在你摆姿势的结构中(它使用对象作为容器,而不是我用来保存多个项目的数组)。我认为您可以像这样填写并完成您的要求:

var house = {};
house["01"] = {hID: "01", neighbh: "00001", name: "house 1"};
house["02"] = {hID: "02", neighbh: "00001", name: "house 2"};
house["03"] = {hID: "03", neighbh: "00002", name: "house 3"};
house["04"] = {hID: "04", neighbh: "00003", name: "house 4"};

var neighborhood = {};
neighborhood["00001"] = {id: "00001", name: "first neighborhood", houses: [house["01"], house["02"]]};
neighborhood["00002"] = {id: "00002", name: "second neighborhood", houses: [house["03"]] };
neighborhood["00003"] = {id: "00003", name: "third neighborhood", houses: [house["04"]] };

仅供参考,似乎一个社区中的房屋列表应该是一个数组,而不是一个对象。

【讨论】:

  • 这个问题是因为我将添加更多的房屋和社区我需要能够自动完成,不确定我是否可以有一个用于 var obj 的函数以便对房屋进行分类,然后能够从社区访问正确的房屋。此外,它们不会按顺序排列(因此使用地图对象)。我将不得不检查所有房屋并找到那些与邻居 id 匹配的邻居
  • @SantiagoEsquivel - 查看我添加的最新代码。只要您通过将信息存储在多个位置(例如房屋对象中的社区 id 和社区中包含的单独房屋列表)来双重维护信息,您就必须保持这种双重性。没有自动的方法可以解决这个问题。它就像一个数据库索引。每当您添加/删除/修改数据库时,索引也必须更新。自己创建一组修改方法将便于集中维护。
  • 好的,我认为这会有所帮助,我可能一直在寻找更复杂的方法,但是当有帖子并确保我创建实例时,只需将房子 [id] 推到相应的社区我应该没问题。谢谢。
猜你喜欢
  • 2013-02-18
  • 2012-11-25
  • 2023-03-03
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
相关资源
最近更新 更多