私はそうのようなオブジェクトを平坦化するために使用する機能を持って変換します。非平坦化JSオブジェクトと配列
let object = {
a: 1,
b: [
{ c: 2 },
{ c: 3 }
]
};
flatten(object)
// returns {
'a': 1,
'b.0.c': 2,
'b.1.c': 3
}
を私はオブジェクトを非平坦化する必要がありますが、また、彼らはあったかに配列を元に戻します。私は、次のコードを持っている:ほとんどの部分は動作しますが、それはそうのような配列を扱う
unflatten(obj) {
let final = {};
for (let prop in obj) {
this.assign(final, prop.split('.'), obj[prop]);
}
return final;
}
assign(final, path, value) {
let lastKeyIndex = path.length-1;
for (var i = 0; i < lastKeyIndex; ++ i) {
let key = path[i];
if (!(key in final)) {
final[key] = {};
}
final = final[key];
}
final[path[lastKeyIndex]] = value;
}
:私はのような配列であることをb
を必要とするのに対し
{
a: 1,
b: { // Notice how b's value is now an object
"0": { c: 2 }, // Notice how these now have a key corresponding to their index
"1": { c: 3 }
}
}
前:
{
a: 1,
b: [
{ c: 2 },
{ c: 3 }
]
}
私はここからどこへ行くのか迷っています。
'a.b.0.c.0.d',
'a.b.0.c.1.d',
'a.b.1.c.0.d',
'a.b.1.c.1.d',
'a.b.1.c.2.d',
// etc
それはバニラJSする必要があるが、es2015が微細である:それはのような配列の任意の数に対処できる必要があります。数字のキーは実際には配列の一部であると仮定しました。
アドバイスがありましたら、感謝しています。