2017-06-22 19 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 
    } 
    ] 
} 

私は2番目のは、私はそれをやるべき道であると信じていますが、他の者のフィードバックを求めていました。最初の方法では、データを読むためには敵の名前を知る必要がありますが、アレイでは、各エリアをループして各エリアの敵を読むことができます。 ご協力いただきありがとうございます!

+1

2番目の方法では、配列の形になっているので、データをより便利に操作できると思います。なぜそれが有利なのでしょうか?配列はデフォルトで反復可能であるため、反復可能でないオブジェクトでは(ただし、そうすることはできます)オブジェクトの場合はそうではありません。しかし、JSON配列では関数、日付、未定義は使用できないことに注意してください。 –

+0

私は* "iterator" *ステートメントに同意しますが、質問が実際にはあなたのコンテキストでの実際の使用法で表現されない限り、それは本当にただの意見に基づいています。私は実際に名前付きキーが「アンチパターン」であると信じていますが。それはIMOです。 –

+0

あなたは一歩進んで、エリアオブジェクトの配列を作成することができます: '{{area1: 'Area 1'、敵:{{name: '敵1'、タイプ: 'human'}、{name: 'enemy 2 '、type:' human '}]}、{}、{}] ' –

答えて

0

第2の選択肢が正しいと感じます。これは適切に構造化されているため、任意のエリアをループして敵のオプションを簡単に実行できます。私の提案は、2番目のものと一緒に行くことです。

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

特定の領域の敵をスキャンします。

私はこれが役立つことを望みます。 :)

関連する問題