我已經使用扁平化的對象,像這樣的功能:Unflatten JS對象和轉換陣列
let object = {
a: 1,
b: [
{ c: 2 },
{ c: 3 }
]
};
flatten(object)
// returns {
'a': 1,
'b.0.c': 2,
'b.1.c': 3
}
我需要unflatten對象,但也恢復陣列他們如何。我有以下代碼:
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;
}
其中工程大部分,但它把像這樣的數組:
{
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 }
}
}
而我需要b
是像陣列之前:
{
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是罰款。它假定任何一個數字鍵實際上都是數組的一部分。
如果有人有任何建議,很感謝!