I have a tree, that I want to traverse through. I want to make each internalChecked = false
. I wrote some code, but failed.
Tree
JavaScript
x
189
189
1
let json = [
2
{
3
"internalDisabled": false,
4
"internalChecked": true,
5
"internalCollapsed": true,
6
"text": "Steel",
7
"value": 2,
8
"internalChildren": [
9
{
10
"internalDisabled": false,
11
"internalChecked": true,
12
"internalCollapsed": false,
13
"text": "Cars",
14
"value": 54,
15
"internalChildren": [
16
{
17
"internalDisabled": false,
18
"internalChecked": true,
19
"internalCollapsed": false,
20
"text": "Sedan",
21
"value": 55,
22
"internalChildren": [
23
{
24
"internalDisabled": false,
25
"internalChecked": true,
26
"internalCollapsed": false,
27
"text": "test",
28
"value": 1053
29
},
30
{
31
"internalDisabled": false,
32
"internalChecked": true,
33
"internalCollapsed": false,
34
"text": "cc cc cc",
35
"value": 1054,
36
"internalChildren": [
37
{
38
"internalDisabled": false,
39
"internalChecked": true,
40
"internalCollapsed": false,
41
"text": "cccccc",
42
"value": 1055
43
},
44
{
45
"internalDisabled": false,
46
"internalChecked": true,
47
"internalCollapsed": false,
48
"text": "xxxxxxx",
49
"value": 1056
50
}
51
]
52
}
53
]
54
},
55
{
56
"internalDisabled": false,
57
"internalChecked": true,
58
"internalCollapsed": false,
59
"text": "train",
60
"value": 2053,
61
"internalChildren": [
62
{
63
"internalDisabled": false,
64
"internalChecked": true,
65
"internalCollapsed": false,
66
"text": "bullet",
67
"value": 2054
68
},
69
{
70
"internalDisabled": false,
71
"internalChecked": true,
72
"internalCollapsed": false,
73
"text": "pessenger",
74
"value": 2055
75
}
76
]
77
}
78
]
79
}
80
]
81
},
82
{
83
"internalDisabled": false,
84
"internalChecked": true,
85
"internalCollapsed": true,
86
"text": "Auto/Boat",
87
"value": 3
88
},
89
{
90
"internalDisabled": false,
91
"internalChecked": true,
92
"internalCollapsed": true,
93
"text": "Build Your Own Job",
94
"value": 4
95
},
96
{
97
"internalDisabled": false,
98
"internalChecked": true,
99
"internalCollapsed": true,
100
"text": "Cleaning & Housekeeping",
101
"value": 5
102
},
103
{
104
"internalDisabled": false,
105
"internalChecked": true,
106
"internalCollapsed": true,
107
"text": "Delivery & Courier",
108
"value": 6
109
},
110
{
111
"internalDisabled": false,
112
"internalChecked": true,
113
"internalCollapsed": true,
114
"text": "Handyman",
115
"value": 7
116
},
117
{
118
"internalDisabled": false,
119
"internalChecked": true,
120
"internalCollapsed": true,
121
"text": "Hourly Help",
122
"value": 8
123
},
124
{
125
"internalDisabled": false,
126
"internalChecked": true,
127
"internalCollapsed": true,
128
"text": "Lawn & Yard",
129
"value": 10
130
},
131
{
132
"internalDisabled": false,
133
"internalChecked": true,
134
"internalCollapsed": true,
135
"text": "Moving",
136
"value": 11
137
},
138
{
139
"internalDisabled": false,
140
"internalChecked": true,
141
"internalCollapsed": true,
142
"text": "Organization",
143
"value": 12
144
},
145
{
146
"internalDisabled": false,
147
"internalChecked": true,
148
"internalCollapsed": true,
149
"text": "Painting",
150
"value": 13
151
},
152
{
153
"internalDisabled": false,
154
"internalChecked": true,
155
"internalCollapsed": true,
156
"text": "Pet Care",
157
"value": 14
158
},
159
{
160
"internalDisabled": false,
161
"internalChecked": true,
162
"internalCollapsed": true,
163
"text": "TV Mount & Electronics",
164
"value": 15
165
}
166
];
167
168
169
//CODE
170
let savedIndex
171
let outPut= []
172
let savedJson = json
173
174
function traverseArray(__json, __index){
175
for (let i = 0; i < __json.length; i++) {
176
const _item = __json[i];
177
_item.internalChecked = false
178
outPut.push({
179
_item
180
})
181
if(_item.internalChildren && _item.internalChildren.length > 0){
182
savedIndex = __index
183
traverseArray(_item.internalChildren, i)
184
}
185
}
186
return outPut
187
}
188
189
console.log(traverseArray(json, 0))
Advertisement
Answer
You are pushing every json chunk in an output array that makes the output different than it is, just use __json[i].internalChecked = false
in your loop and it will update the array on which you are iterating on:
JavaScript
1
22
22
1
let json = [ { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Steel", "value": 2, "internalChildren": [ { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "Cars", "value": 54, "internalChildren": [ { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "Sedan", "value": 55, "internalChildren": [ { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "test", "value": 1053 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "cc cc cc", "value": 1054, "internalChildren": [ { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "cccccc", "value": 1055 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "xxxxxxx", "value": 1056 } ] } ] }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "train", "value": 2053, "internalChildren": [ { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "bullet", "value": 2054 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": false, "text": "pessenger", "value": 2055 } ] } ] } ] }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Auto/Boat", "value": 3 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Build Your Own Job", "value": 4 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Cleaning & Housekeeping", "value": 5 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Delivery & Courier", "value": 6 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Handyman", "value": 7 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Hourly Help", "value": 8 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Lawn & Yard", "value": 10 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Moving", "value": 11 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Organization", "value": 12 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Painting", "value": 13 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "Pet Care", "value": 14 }, { "internalDisabled": false, "internalChecked": true, "internalCollapsed": true, "text": "TV Mount & Electronics", "value": 15 } ];
2
3
4
let savedIndex
5
let savedJson = json
6
7
function traverseArray(__json, __index){
8
for (let i = 0; i < __json.length; i++) {
9
__json[i].internalChecked = false
10
if (__json[i].internalChildren) {
11
savedIndex = __index
12
traverseArray(__json[i].internalChildren, i)
13
}
14
}
15
return savedJson
16
}
17
18
console.log("original length:: ", json.length);
19
const output = traverseArray(savedJson, 0);
20
console.log("output length:: ", output.length);
21
22
console.log("output:: ", output);
Also, if clause,
JavaScript
1
2
1
if (__json[i].internalChildren && __json[i].internalChildren.length > 0)
2
can be simply
JavaScript
1
2
1
if (__json[i].internalChildren)
2