-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreverseNestedObject.js
More file actions
28 lines (27 loc) · 1.08 KB
/
reverseNestedObject.js
File metadata and controls
28 lines (27 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function reverseNestedObject(input, processed) {
let output = {};
for (let key in input) {
if (typeof input[key] === "object") {
for (let innerKey in input[key]) {
if (!processed) {
//最一開始帶入processed為null,將最外層的鍵值轉為最內層的值,並傳入遞迴
processed = {};
processed[innerKey] = key; // process {hired:{be:{...}}} to {be:hired}
} else {
//第二層開始,將內層鍵值賦予上一層的processed物件
let newProcessed = {};
newProcessed[innerKey] = processed; //process {be:{to:...}} to {to:{be:hired}}
processed = newProcessed;
}
}
//將內層物件與processed物件傳入遞迴
//以第一次遞迴呼叫reverseNestedObject為例 input = {be:{to:{...}}} , processed = {be:hired}
output = reverseNestedObject(input[key], processed);
} else {
//最內層將 deserve: "I" 轉為 {I :{ deserve :{...}}}
output[input[key]] = processed;
}
}
return output;
}
exports.reverseNestedObject = reverseNestedObject;