@@ -181,7 +181,7 @@ function walk (opts, nodes) {
181
181
const keys = loopParams . keys
182
182
183
183
// creates a copy of the keys that will be changed within the loop
184
- const localsBackup = makeBackupLoopKeys ( keys [ 0 ] , keys [ 1 ] , opts . locals )
184
+ const localsBackup = makeLocalsBackup ( keys , opts . locals )
185
185
186
186
// run the loop, different types of loops for arrays and objects
187
187
if ( Array . isArray ( target ) ) {
@@ -195,7 +195,7 @@ function walk (opts, nodes) {
195
195
}
196
196
197
197
// returns the original keys values that was changed within the loop
198
- opts . locals = revertBackupedLocals ( keys [ 0 ] , keys [ 1 ] , opts . locals , localsBackup )
198
+ opts . locals = revertBackupedLocals ( keys , opts . locals , localsBackup )
199
199
200
200
// return directly out of the loop, which will skip the "each" tag
201
201
return m
@@ -269,27 +269,31 @@ function parseLoopStatement (input) {
269
269
}
270
270
271
271
/**
272
- * Creates a backup of keys within the loop
272
+ * Creates a backup of keys values
273
273
*/
274
- function makeBackupLoopKeys ( p1 , p2 , locals ) {
274
+ function makeLocalsBackup ( keys , locals ) {
275
275
let backup = { }
276
- if ( p1 && data . locals . hasOwnProperty ( p1 ) ) backup [ p1 ] = data . locals [ p1 ]
277
- if ( p2 && data . locals . hasOwnProperty ( p2 ) ) backup [ p2 ] = data . locals [ p2 ]
276
+
277
+ for ( let i = 0 ; i < keys . length ; i ++ ) {
278
+ const key = keys [ i ]
279
+ if ( data . locals . hasOwnProperty ( key ) ) backup [ key ] = cloneDeep ( data . locals [ key ] )
280
+ }
278
281
279
282
return backup
280
283
}
281
284
282
285
/**
283
286
* Returns the original keys values
284
287
*/
285
- function revertBackupedLocals ( p1 , p2 , locals , backup ) {
286
- // Remove loop keys from locals
287
- delete locals [ p1 ]
288
- delete locals [ p2 ]
289
-
290
- // Revert copied keys
291
- if ( p1 && backup . hasOwnProperty ( p1 ) ) locals [ p1 ] = backup [ p1 ]
292
- if ( p2 && backup . hasOwnProperty ( p2 ) ) locals [ p2 ] = backup [ p2 ]
288
+ function revertBackupedLocals ( keys , locals , backup ) {
289
+ for ( let i = 0 ; i < keys . length ; i ++ ) {
290
+ const key = keys [ i ]
291
+ // remove key from locals
292
+ delete locals [ key ]
293
+
294
+ // revert copied key value
295
+ if ( backup . hasOwnProperty ( key ) ) locals [ key ] = backup [ key ]
296
+ }
293
297
294
298
return locals
295
299
}
0 commit comments