@@ -8,7 +8,9 @@ var callBind = require('call-bind');
8
8
var callBound = require ( 'call-bound' ) ;
9
9
10
10
var $join = callBound ( 'Array.prototype.join' ) ;
11
- var $push = callBound ( 'Array.prototype.push' ) ;
11
+ var $indexOf = callBound ( 'Array.prototype.indexOf' ) ;
12
+ var $splice = callBound ( 'Array.prototype.splice' ) ;
13
+ var $sort = callBound ( 'Array.prototype.sort' ) ;
12
14
13
15
var strRepeat = function repeat ( n , char ) {
14
16
var str = '' ;
@@ -60,17 +62,19 @@ module.exports = function stableStringify(obj) {
60
62
var out = [ ] ;
61
63
for ( var i = 0 ; i < node . length ; i ++ ) {
62
64
var item = stringify ( node , i , node [ i ] , level + 1 ) || jsonStringify ( null ) ;
63
- $push ( out , indent + space + item ) ;
65
+ out [ out . length ] = indent + space + item ;
64
66
}
65
67
return '[' + $join ( out , ',' ) + indent + ']' ;
66
68
}
67
69
68
- if ( seen . indexOf ( node ) !== - 1 ) {
70
+ if ( $ indexOf( seen , node ) !== - 1 ) {
69
71
if ( cycles ) { return jsonStringify ( '__cycle__' ) ; }
70
72
throw new TypeError ( 'Converting circular structure to JSON' ) ;
71
- } else { $push ( seen , node ) ; }
73
+ } else {
74
+ seen [ seen . length ] = node ;
75
+ }
72
76
73
- var keys = objectKeys ( node ) . sort ( cmp && cmp ( node ) ) ;
77
+ var keys = $sort ( objectKeys ( node ) , cmp && cmp ( node ) ) ;
74
78
var out = [ ] ;
75
79
for ( var i = 0 ; i < keys . length ; i ++ ) {
76
80
var key = keys [ i ] ;
@@ -82,9 +86,9 @@ module.exports = function stableStringify(obj) {
82
86
+ colonSeparator
83
87
+ value ;
84
88
85
- $push ( out , indent + space + keyValue ) ;
89
+ out [ out . length ] = indent + space + keyValue ;
86
90
}
87
- seen . splice ( seen . indexOf ( node ) , 1 ) ;
91
+ $ splice( seen , $ indexOf( seen , node ) , 1 ) ;
88
92
return '{' + $join ( out , ',' ) + indent + '}' ;
89
93
90
94
} ( { '' : obj } , '' , obj , 0 ) ) ;
0 commit comments