Javascript JSON命名对象与具有name属性的数组
这可能是一个JS问题,我不确定。 我使用JSON来存储游戏中敌人的数据。我目前的结构如下:Javascript JSON命名对象与具有name属性的数组,javascript,json,Javascript,Json,这可能是一个JS问题,我不确定。 我使用JSON来存储游戏中敌人的数据。我目前的结构如下: { "Area 1": { "Enemy Name": { "type": "Human", "lvl": 30 }, "Enemy 2": { "type": "Human", "lvl": 30 } }, "Area 2": { "Enemy 1": { "type": "Human",
{
"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
}
]
}
我相信第二种方式是我应该做的,但我需要别人的反馈。我认为第一种方法,我需要知道敌人的名字,以便读取他们的数据,而通过阵列,我可以在各个区域中循环并读取每个区域中的敌人。
提前感谢您的帮助 第二种选择感觉不错。它结构合理,您可以轻松地在任何区域循环,以对敌人执行操作。我的建议是选择第二个
var Map = [
Area1: [
{
name: "Enemy 1";
metaData: '...'
},
{
name: "Enemy 2";
metaData: '...'
}
],
Area2: [
{
name: "Enemy 1";
metaData: '...'
}
]
];
扫描特定区域的敌人
Map[Area1].forEach(function(enemy) {
//Operation ...
});
我希望这有帮助。:) 我认为使用第二种方法,您将能够更方便地操作数据,因为它是数组形式的。为什么这是一个优势?因为数组在默认情况下是可iterable的,而对于开箱即用的不可iterable对象则不是这种情况(但您可以将它们设置为可iterable)。但请记住,您将无法在JSON数组中使用函数、日期和未定义。我同意“迭代器”语句,但除非这个问题实际上可以用“在您的上下文中的实际使用”来表达,否则它实际上只是基于观点。尽管我实际上认为命名键是一种“反模式”。在我看来,你可以更进一步,创建一个区域对象数组:
[{areaName:'area 1',敌人:[{name:'Foreign 1',type:'human'},{name:'Foreign 2',type:'human'}]},{},{},{}]
@KaushalNiraula这也是我刚才想到的。这将有助于最简单的实现和可扩展性。