2016-04-09 9 views
4

Javascriptが新しく、INI形式のファイルをネストされたオブジェクトに解析する際に問題があります。Javascript - INIファイルを入れ子にされた連想配列に解析する

私が持っているファイルは、次のようにフォーマットされます。私は構造を持っていると思い

ford.car.focus.transmission=standard 
ford.car.focus.engine=four-cylinder 
ford.car.focus.fuel=gas 

ford.car.taurus.transmission=automatic 
ford.car.taurus.engine=V-8 
ford.car.taurus.fuel=diesel 

purchased=Ford Taurus 

は、次のようになります。

{ ford: 
    { car: 
    { focus: 
     { 
     transmission: 'standard', 
     engine: 'four-cylinder', 
     fuel: 'gas' 
     } 
    } 
    { taurus: 
     { 
     transmission: 'automatic', 
     engine: 'V-8', 
     fuel: 'diesel' 
     } 
    } 
    } 
    purchased: 'Ford Taurus' 
} 

私は、アレイ内の行にファイルを格納しています、 '\ n'で分割する。

hash.ford.car.focus.fuel 
# 'gas' 

hash.purchase 
# 'Ford Taurus' 

:これは私のように、ハッシュオブジェクトの値にアクセスできなければならない

var hash = {}; 
var array = fileData.toString().split("\n"); 
for (i in array) { 
    var tmp = array[i].split("="); 
    createNestedObjects(tmp[0], tmp[1], hash); 
} 

:私はこのように私のグローバルオブジェクトを渡して、ループ内で呼び出されることになるメソッドを記述しようとしています私はここに示唆されたものを試しました:Javascript: how to dynamically create nested objects using object names given by an arrayしかし、それは巣の最後の項目を設定するようにしか見えません。

createNestedObjects(path, value, obj) { 
    var keys = path.split('.'); 
    keys.reduce(function(o, k) { 
    if (k == keys[keys.length-1]) { 
     return o[k] = value; 
    } else { 
     return o[k] = {}; 
    } 
    }, obj); 
} 

しかし、それだけで、ネストされた値のための最後の値を返します:

{ ford: { car: { taurus: { fuel: 'diesel' } } }, 
    purchased: 'Ford Taurus' } 
+1

'createNestedObjects'は、キーがすでにオブジェクトに存在するかどうかをチェックしないので、キーがすでに存在する場合はそれを置き換えます。 – Barmar

答えて

2

機能は中間かどうかをチェックする必要がある

{ fuel: 'diesel', 
    purchased: 'Ford Taurus' } 

私の失敗した試みは、このようになりますキーを割り当てる前にすでに存在しています。

createNestedObjects(path, value, obj) { 
    var keys = path.split('.'); 
    keys.reduce(function(o, k) { 
    if (k == keys[keys.length-1]) { 
     return o[k] = value; 
    } else if (o[k]) { 
     return o[k]; 
    } else { 
     return o[k] = {}; 
    } 
    }, obj); 
} 
+0

優秀!ありがとうございました! – jbmoon

関連する問題