@@ -63,7 +63,7 @@ function strEscape (str) {
63
63
// Full version: supports all options
64
64
function stringifyFullFn ( key , parent , stack , replacer , indent ) {
65
65
var i , res , join
66
- const mind = gap
66
+ const startGap = gap
67
67
var value = parent [ key ]
68
68
69
69
if ( typeof value === 'object' && value !== null && typeof value . toJSON === 'function' ) {
@@ -104,11 +104,11 @@ function stringifyFullFn (key, parent, stack, replacer, indent) {
104
104
const tmp = stringifyFullFn ( i , value , stack , replacer , indent )
105
105
res += tmp !== undefined ? tmp : 'null'
106
106
if ( gap !== '' ) {
107
- res += `\n${ mind } `
107
+ res += `\n${ startGap } `
108
108
}
109
109
res += ']'
110
110
stack . pop ( )
111
- gap = mind
111
+ gap = startGap
112
112
return res
113
113
}
114
114
@@ -124,39 +124,25 @@ function stringifyFullFn (key, parent, stack, replacer, indent) {
124
124
res += `\n${ gap } `
125
125
join = `,\n${ gap } `
126
126
}
127
- var last = false
128
- for ( i = 0 ; i < keys . length - 1 ; i ++ ) {
127
+ let separator = ''
128
+ for ( i = 0 ; i < keys . length ; i ++ ) {
129
129
key = keys [ i ]
130
130
const tmp = stringifyFullFn ( key , value , stack , replacer , indent )
131
131
if ( tmp !== undefined ) {
132
- if ( last ) {
133
- res += join
134
- }
135
- res += `"${ strEscape ( key ) } "${ gap !== '' ? ': ' : ':' } ${ tmp } `
136
- last = true
132
+ res += `${ separator } "${ strEscape ( key ) } "${ gap !== '' ? ': ' : ':' } ${ tmp } `
133
+ separator = join
137
134
}
138
135
}
139
- key = keys [ i ]
140
- const tmp = stringifyFullFn ( key , value , stack , replacer , indent )
141
- if ( tmp !== undefined ) {
142
- if ( last ) {
143
- res += join
144
- }
145
- if ( gap === '' ) {
146
- res += `"${ strEscape ( key ) } ":${ tmp } `
147
- } else {
148
- res += `"${ strEscape ( key ) } ": ${ tmp } \n${ mind } `
149
- }
150
- } else if ( gap !== '' ) {
151
- if ( last ) {
152
- res += `\n${ mind } `
136
+ if ( gap !== '' ) {
137
+ if ( separator !== '' ) {
138
+ res += `\n${ startGap } `
153
139
} else {
154
140
res = '{'
155
141
}
156
142
}
157
143
res += '}'
158
144
stack . pop ( )
159
- gap = mind
145
+ gap = startGap
160
146
return res
161
147
case 'string' :
162
148
return `"${ strEscape ( value ) } "`
@@ -170,7 +156,7 @@ function stringifyFullFn (key, parent, stack, replacer, indent) {
170
156
171
157
function stringifyFullArr ( key , value , stack , replacer , indent ) {
172
158
var i , res , join
173
- const mind = gap
159
+ const startGap = gap
174
160
175
161
if ( typeof value === 'object' && value !== null && typeof value . toJSON === 'function' ) {
176
162
value = value . toJSON ( key )
@@ -209,11 +195,11 @@ function stringifyFullArr (key, value, stack, replacer, indent) {
209
195
const tmp = stringifyFullArr ( i , value [ i ] , stack , replacer , indent )
210
196
res += tmp !== undefined ? tmp : 'null'
211
197
if ( gap !== '' ) {
212
- res += `\n${ mind } `
198
+ res += `\n${ startGap } `
213
199
}
214
200
res += ']'
215
201
stack . pop ( )
216
- gap = mind
202
+ gap = startGap
217
203
return res
218
204
}
219
205
@@ -228,30 +214,27 @@ function stringifyFullArr (key, value, stack, replacer, indent) {
228
214
res += `\n${ gap } `
229
215
join = `,\n${ gap } `
230
216
}
231
- var last = false
217
+ let separator = ''
232
218
for ( i = 0 ; i < replacer . length ; i ++ ) {
233
219
if ( typeof replacer [ i ] === 'string' || typeof replacer [ i ] === 'number' ) {
234
220
key = replacer [ i ]
235
221
const tmp = stringifyFullArr ( key , value [ key ] , stack , replacer , indent )
236
222
if ( tmp !== undefined ) {
237
- if ( last ) {
238
- res += join
239
- }
240
- res += `"${ strEscape ( key ) } "${ gap ? ': ' : ':' } ${ tmp } `
241
- last = true
223
+ res += `${ separator } "${ strEscape ( key ) } "${ gap ? ': ' : ':' } ${ tmp } `
224
+ separator = join
242
225
}
243
226
}
244
227
}
245
228
if ( gap !== '' ) {
246
- if ( last ) {
247
- res += `\n${ mind } `
229
+ if ( separator !== '' ) {
230
+ res += `\n${ startGap } `
248
231
} else {
249
232
res = '{'
250
233
}
251
234
}
252
235
res += '}'
253
236
stack . pop ( )
254
- gap = mind
237
+ gap = startGap
255
238
return res
256
239
case 'string' :
257
240
return `"${ strEscape ( value ) } "`
@@ -265,8 +248,8 @@ function stringifyFullArr (key, value, stack, replacer, indent) {
265
248
266
249
// Supports only the spacer option
267
250
function stringifyIndent ( key , value , stack , indent ) {
268
- var i , res , join , add
269
- const mind = gap
251
+ var i , res , join
252
+ const startGap = gap
270
253
271
254
switch ( typeof value ) {
272
255
case 'object' :
@@ -311,11 +294,11 @@ function stringifyIndent (key, value, stack, indent) {
311
294
const tmp = stringifyIndent ( i , value [ i ] , stack , indent )
312
295
res += tmp !== undefined ? tmp : 'null'
313
296
if ( gap !== '' ) {
314
- res += `\n${ mind } `
297
+ res += `\n${ startGap } `
315
298
}
316
299
res += ']'
317
300
stack . pop ( )
318
- gap = mind
301
+ gap = startGap
319
302
return res
320
303
}
321
304
@@ -327,33 +310,29 @@ function stringifyIndent (key, value, stack, indent) {
327
310
res = '{'
328
311
if ( gap === '' ) {
329
312
join = ','
330
- add = ''
331
313
} else {
332
- add = `\n${ gap } `
314
+ res + = `\n${ gap } `
333
315
join = `,\n${ gap } `
334
316
}
335
- for ( i = 0 ; i < keys . length - 1 ; i ++ ) {
317
+ let separator = ''
318
+ for ( i = 0 ; i < keys . length ; i ++ ) {
336
319
key = keys [ i ]
337
320
const tmp = stringifyIndent ( key , value [ key ] , stack , indent )
338
321
if ( tmp !== undefined ) {
339
- add += `"${ strEscape ( key ) } "${ gap ? ': ' : ':' } ${ tmp } ${ join } `
322
+ res += `${ separator } "${ strEscape ( key ) } "${ gap ? ': ' : ':' } ${ tmp } `
323
+ separator = join
340
324
}
341
325
}
342
- key = keys [ i ]
343
- const tmp = stringifyIndent ( key , value [ key ] , stack , indent )
344
- if ( tmp !== undefined ) {
345
- if ( gap === '' ) {
346
- add += `"${ strEscape ( key ) } ":${ tmp } `
326
+ if ( gap !== '' ) {
327
+ if ( separator !== '' ) {
328
+ res += `\n${ startGap } `
347
329
} else {
348
- add += `" ${ strEscape ( key ) } ": ${ tmp } \n ${ mind } `
330
+ res = '{'
349
331
}
350
332
}
351
- if ( add . length > gap . length + 1 ) {
352
- res += add
353
- }
354
333
res += '}'
355
334
stack . pop ( )
356
- gap = mind
335
+ gap = startGap
357
336
return res
358
337
case 'string' :
359
338
return `"${ strEscape ( value ) } "`
@@ -407,17 +386,14 @@ function stringifyReplacerArr (key, value, stack, replacer) {
407
386
}
408
387
stack . push ( value )
409
388
res = '{'
410
- var last = false
389
+ let separator = ''
411
390
for ( i = 0 ; i < replacer . length ; i ++ ) {
412
391
if ( typeof replacer [ i ] === 'string' || typeof replacer [ i ] === 'number' ) {
413
392
key = replacer [ i ]
414
393
const tmp = stringifyReplacerArr ( key , value [ key ] , stack , replacer )
415
394
if ( tmp !== undefined ) {
416
- if ( last ) {
417
- res += ','
418
- }
419
- res += `"${ strEscape ( key ) } ":${ tmp } `
420
- last = true
395
+ res += `${ separator } "${ strEscape ( key ) } ":${ tmp } `
396
+ separator = ','
421
397
}
422
398
}
423
399
}
@@ -478,25 +454,14 @@ function stringifyReplacerFn (key, parent, stack, replacer) {
478
454
}
479
455
stack . push ( value )
480
456
res = '{'
481
- var last = false
482
- for ( i = 0 ; i < keys . length - 1 ; i ++ ) {
457
+ let separator = ''
458
+ for ( i = 0 ; i < keys . length ; i ++ ) {
483
459
key = keys [ i ]
484
460
const tmp = stringifyReplacerFn ( key , value , stack , replacer )
485
461
if ( tmp !== undefined ) {
486
- if ( last === true ) {
487
- res += ','
488
- }
489
- res += `"${ strEscape ( key ) } ":${ tmp } `
490
- last = true
491
- }
492
- }
493
- key = keys [ i ]
494
- const tmp = stringifyReplacerFn ( key , value , stack , replacer )
495
- if ( tmp !== undefined ) {
496
- if ( last === true ) {
497
- res += ','
462
+ res += `${ separator } "${ strEscape ( key ) } ":${ tmp } `
463
+ separator = ','
498
464
}
499
- res += `"${ strEscape ( key ) } ":${ tmp } `
500
465
}
501
466
res += '}'
502
467
stack . pop ( )
0 commit comments