2017-06-22 70 views
0

這可能是一個JS問題,我不確定。JSON命名對象與名稱屬性的數組

我正在使用JSON存儲遊戲中敵人的數據。我目前正在構建這樣的:

{ 
    "Area 1": { 
    "Enemy Name": { 
     "type": "Human", 
     "lvl": 30 
    }, 
    "Enemy 2": { 
     "type": "Human", 
     "lvl": 30 
    } 
    }, 
    "Area 2": { 
    "Enemy 1": { 
     "type": "Human", 
     "lvl": 30 
    }, 
    "Enemy 2": { 
     "type": "Human", 
     "lvl": 30 
    } 
    } 
} 

我想知道我是否應該使用敵人的數組,與"name"屬性,而不是每一個區域來代替。像這樣:

{ 
    "Area 1": [ 
    { 
     "name": "Enemy Name", 
     "type": "Human", 
     "lvl": 10 
    }, 
    { 
     "name": "Enemy 2", 
     "type": "Human", 
     "lvl": 30 
    } 
    ], 
    "Area 2": [ 
    { 
     "name": "Enemy 1", 
     "type": "Human", 
     "lvl": 30 
    }, 
    { 
     "name": "Enemy 2", 
     "type": "Human", 
     "lvl": 30 
    } 
    ] 
} 

我相信第二個是我應該這樣做的方式,但希望他人的反饋。我認爲,第一種方法是,我需要知道敵人的名字才能讀取他們的數據,而在數組中,我可以循環遍歷區域並閱讀每個區域的敵人。 在此先感謝您的幫助!

+1

我認爲與第二種方式,你將能夠更方便地操縱你的數據,因爲它的形式是數組。爲什麼這是一個優勢?因爲默認情況下數組是可迭代的,而不是不可迭代的對象的情況(但你可以使它們成爲這樣)。但請記住,您將無法使用JSON數組中的函數,日期和未定義。 –

+0

我同意*「iterator」*聲明,但除非問題實際上可以用「在您的上下文中的實際用法」來表達,否則它實際上只是基於意見。雖然我確實相信命名的鍵是「反模式」。國際海事組織是。 –

+0

你可以走一步,並創建一個區域對象數組: '[{areaName:'Area 1',敵人:[{name:'enemy 1',type:'human'},{name:'enemy 2 ',鍵入:'human'}]},{},{}]' –

回答

0

第二個選項感覺很好。它的結構合理,你可以輕鬆地通過任何區域循環執行對敵人的選項。我的建議是與第二個一起去。

var Map = [ 
    Area1: [ 
    { 
     name: "Enemy 1"; 
     metaData: '...' 
    }, 
    { 
     name: "Enemy 2"; 
     metaData: '...' 
    } 
    ], 
    Area2: [ 
    { 
     name: "Enemy 1"; 
     metaData: '...' 
    } 
    ] 
]; 

掃描特定區域內的敵人。

Map[Area1].forEach(function(enemy) { 
    //Operation ... 
}); 

我希望這會有所幫助。 :)