2017-12-18 5 views
-1

私は.jsonデータストアを持ち、Map()の特定のメソッドを使用して値を取得します。ここ は私の.jsonファイルのいくつかの例です:マップするJSONファイル

"program": [ 
    { 
     "name": "program1", 
     "phases": [ 
      { 
       "name": "A", 
       "cycles": [ 
        { 
         "name": "day 1", 
         "exercises": [ 
          { 
           "name": "workout1", 
           "set": 4, 
           "repetitions": 8 
          }, 
          { 
           "name": "workout2", 
           "set": 4, 
           "repetitions": 8 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    } 
] 

私の目標は、このような何かを行うことです。

console.log(program.get("program1").phases.get("A").name); 

私はマップ

に.jsonファイルを変換し、同様の機能を持っています
const datastore = require("./datastore.json"); 

function toMap(array, prop) { 
    const map = new Map(); 
    for(const el of array) map.set(el[prop], el); 
    return map; 
} 

var program = toMap(datastore, "name"); 

しかし、これは1つの "マップレイヤー"のみを変換するので、1つは.get()、それより深いものは実行できません。

次は、マップを変更してデータストアに保存し直したいということです。

+0

なぜマップに設定していますか? '.forEach'ループのように.json構造体を反復するだけではどうですか? – VtoCorleone

+0

'.get()'で値を選択したいので、この行を3回続けて実行する必要があります.3つの '.forEach'を使いたくない場合があります。私のアプリケーションは多くの情報を必要とするため、マップはこの場合、forEachよりも優れたパフォーマンスを得たと思います。 –

答えて

0

の下に固定されたバージョンを参照してください:それは唯一の代わりにマップにすべての配列を変換すること、マップに与えられたキーで配列を変換します

function toMap(array, key) { 
    const map = new Map(); 
    for(const element of array) { 
     if (element[key]) { 
      map.set(element[key], element); 
     } 
     for(var subkey in element) { 
      if (Array.isArray(element[subkey])) { 
       if (element[subkey][0][key]) { 
        element[subkey] = toMap(element[subkey], key); 
       } 
      } 
     } 
    } 
    return map; 
} 

0

toMap()機能を修正するために再帰を使用する必要があります。私は@Vipinクマーのバージョンからいくつかのバグを修正し

function toMap(array, prop) { 
    const map = new Map(); 
    for(const el of array) { 
     map.set(el[prop], el); 
     for(var key in el) { 
     if (Array.isArray(el[key])) { 
      el[key] = toMap(el[key], prop); 
     } 
     } 
    } 
    return map; 
} 
+0

変換されたマップをjsonファイルに保存する方法はありますか? –

+0

申し訳ありませんが、上のコードは、指定された小道具のないマップ内の配列も変換します。 –

関連する問題