Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON命名对象与具有name属性的数组_Javascript_Json - Fatal编程技术网

Javascript JSON命名对象与具有name属性的数组

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",

这可能是一个JS问题,我不确定。

我使用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
    }
  ]
}
我相信第二种方式是我应该做的,但我需要别人的反馈。我认为第一种方法,我需要知道敌人的名字,以便读取他们的数据,而通过阵列,我可以在各个区域中循环并读取每个区域中的敌人。
提前感谢您的帮助

第二种选择感觉不错。它结构合理,您可以轻松地在任何区域循环,以对敌人执行操作。我的建议是选择第二个

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这也是我刚才想到的。这将有助于最简单的实现和可扩展性。