2017-11-17 14 views
-2

ネストされたオブジェクトを作成しようとしていますが、私は自分自身を明確にしようとします。Javascriptでネストされたオブジェクトを作成する

私は、このJSONの構造を有する:

{ 
     "origin.geo.country": "USA", 
     "origin.geo.state": "NY", 
     "origin.geo.zip": 4444, 
     "user.name": "Michael", 
     "user.surname": "Jordan" 
} 

をそして、私はこのような何かを出力する関数必要があります:私はこれを達成するために再帰を使用する必要が知っているが、私は

{ 
    origin: { 
     geo: { 
      country: "USA", 
      state: "NY", 
      zip: 4444 
     } 
    }, 
    user: { 
     name: "Michael", 
     surname: "Jordan" 
    } 
} 

をそれをコード化することはできません。 皆さん、お手伝いできますか?

ありがとうございました。

+2

@BenBeckちょうどあなたが重複したとして、質問をマークしたいときに近いリンクを使用して、それはあなたのためのコメント:) – Archer

+1

を追加します@アーチャー、あなたの男。ありがとうございます –

答えて

2

だから、みんな、

@Benベック答えは私を助けました。

私は関数にいくつかのマイナーな変更を行う必要があります。

function (path,value,obj) { 

    var parts = path.split("."), part; 

    //reference the parent object 
    var parent = obj; 

    while(part = parts.shift()) { 

     // here I check if the property already exists 
     if(!obj.hasOwnProperty(part)) obj[part] = {}; 

     // if is the last index i set the prop value 
     if(parts.length === 0) obj[part] = value; 

     obj = obj[part]; // update "pointer" 
    } 

    //finally return the populated object 
    return parent; 

} 
0

たとえば、 Array#reduce

const o = { 
 
    "origin.geo.country": "USA", 
 
    "origin.geo.state": "NY", 
 
    "origin.geo.zip": 4444, 
 
    "user.name": "Michael", 
 
    "user.surname": "Jordan", 
 
}; 
 

 
const r = Object.keys(o).reduce((s, a) => { 
 
    const t = a.split('.'); 
 
    const k = t[0]; 
 
    const v = t[t.length - 1]; 
 
    k in s ? s[k][v] = o[a] : s[k] = Object.assign({}, { [v]: o[a] }); 
 
    return s; 
 
}, {}); 
 

 
console.log(r);

+1

これは既に回答済みです。これを閉鎖するようにマークする必要があります。 – Archer

+0

@Archerどこで答えられましたか? –

+0

質問: – Archer

関連する問題