這可能是一個奇怪的問題,但我正在做一個專案,似乎無法解決這個問題。我需要能夠采用這樣的 Javascript 物件:
{
field1: {
field2: {
field3: "value 1",
field4: "value 2"
}
}
}
并獲取具有多個鍵的任何欄位,并將結果拆分為單獨的陣列,如下所示:
[
{
field1: {
field2: {
field3: "value 1"
}
}
},
{
field1: {
field2: {
field4: "value 2"
}
}
}
]
我已經嘗試構建一些將遍歷物件結構的遞回函式,并且只要 avalue是型別object并且具有多個鍵,我就會嘗試復制物件并給每個“子”它自己的父結構。我不知道這是否有意義,但我已經堅持了一段時間,感覺我可能只是忽略了一些可以完成這項作業的簡單事情。
我很感激任何意見。謝謝!
uj5u.com熱心網友回復:
這是您原始輸入的快速示例。
但是需要更多具有有效輸出的測驗用例來驗證。(它肯定會很快脫軌)
const input = {
field1: {
field2: {
field3: "value 1",
field4: "value 2"
}
}
};
function recursivelyFlatten(obj) {
const result = [];
for (const [k, v] of Object.entries(obj)) {
if (v && typeof v === 'object' && Object.entries(v).length) {
for (const o of recursivelyFlatten(v)) {
result.push({ [k]: o });
}
}
else {
result.push({ [k]: v });
}
}
return result;
}
console.log(recursivelyFlatten(input));
更多樣品:
顯示代碼片段
function recursivelyFlatten(obj) { const result = []; for (const [k, v] of Object.entries(obj)) { if (v && typeof v === 'object' && Object.entries(v).length) { for (const o of recursivelyFlatten(v)) { result.push({ [k]: o }); } } else { result.push({ [k]: v }); } } return result; }
// Input 1
const input1 = {
field1: {
field2: {
field3: "value 1",
field4: "value 2"
}
},
field5: {
field6: {
field7: "value 3"
},
field8: {
field9: "value 4"
}
}
};
console.log(recursivelyFlatten(input1));
// Input 2
const input2 = {
field1: {
field2: {
field3: {
f3_1: 'v3_1',
f3_2: 'v3_2',
},
field4: "value 2"
}
}
};
console.log(recursivelyFlatten(input2));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525022.html
