2015-03-04 5 views
0

Так что есть два различных набора объектов:ссылки объект внутри другого объекта Javascript

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: {} }; 

Я хочу, чтобы иметь возможность ссылаться на объекты дом внутри дома {} в пределах города. Но отфильтруйте их в соответствующем районе. т. е. дом ["01"] должен идти по соседству ["00001"] (те, у которых соседний номер соответствует соседнему дому). Это так, что я могу иметь все дома в одном другом объекте, но все же иметь возможность вносить в них изменения через объект окрестности. Надеюсь, мне удалось прояснить ситуацию.

Любая помощь будет оценена по достоинству. Спасибо

+1

Можете уточнить, что вы пытаетесь сделать? В частности, я не понимаю этого предложения: «Но отфильтруйте их в соответствующем районе, т. Е. Дом [« 01 »] должен идти по соседству [« 00001 »] (те, у которых есть соседний соседний соседний дом). – KSFT

+0

, так, например, house ["01] (имеет neibh 00001), потому что этот id (per say) соответствует id окрестности из окрестности [" 00001 "], на который он должен ссылаться внутри этого, объясняет ли это лучше? –

ответ

0

Объекты в 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"]] }; 

FYI, похоже, список домов в районе должно быть массивом, а не объект.

+0

Проблема с этим, так как я буду добавлять больше домов и кварталов, я должен иметь возможность сделать это автоматически, не уверен, могу ли я иметь функцию, которая использует для var obj in, чтобы сортировать дома, а затем (следовательно, использование объекта карты). Я должен был бы проверить все дома и найти те, у которых есть соответствующий сосед, с идентификатором окрестности –

+0

@SantiagoEsquivel - см. последний код, который я добавил. Если вы дважды сохраняете информацию, сохраняя информацию в нескольких местах (например, идентификатор окрестности в домашнем объекте и отдельный список домов, содержащихся в окружение, вам придется поддерживать эту двуличность. Автоматического способа решения этого нет. Это похоже на индекс базы данных. Всякий раз, когда вы добавляете/удаляете/изменяете базу данных, индекс также должен быть обновлен. Создание себе набора методов для внесения изменений позволит легко централизовать обслуживание. – jfriend00

+0

Хорошо, я думаю, что это поможет, я, возможно, искал более сложный подход, но просто подталкивал дом [id] в соответствующем районе, когда есть сообщение, и убедившись, что я создаю экземпляр объекта в домах, я должен будь умницей. Благодарю. –