'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var isSorted = require('./isSorted');
var defaults = require('./defaults');
var keys = require('./keys');
var isArr = require('./isArr');
var isObj = require('./isObj');
exports = function(obj) {
    var options =
        arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    defaults(options, defOpts);
    var deep = options.deep,
        comparator = options.comparator;
    var visited = [];
    var visitedResult = [];
    function sort(obj) {
        var idx = visited.indexOf(obj);
        if (idx > -1) {
            return visitedResult[idx];
        }
        var result;
        if (isArr(obj)) {
            result = [];
            visited.push(obj);
            visitedResult.push(result);
            for (var i = 0, len = obj.length; i < len; i++) {
                var value = obj[i];
                if (deep && isObj(value)) {
                    result[i] = sort(value);
                } else {
                    result[i] = value;
                }
            }
        } else {
            result = {};
            visited.push(obj);
            visitedResult.push(result);
            var _keys = keys(obj).sort(comparator);
            for (var _i = 0, _len = _keys.length; _i < _len; _i++) {
                var key = _keys[_i];
                var _value = obj[key];
                if (deep && isObj(_value)) {
                    result[key] = sort(_value);
                } else {
                    result[key] = _value;
                }
            }
        }
        return result;
    }
    return sort(obj);
};
var defOpts = {
    deep: false,
    comparator: isSorted.defComparator
};
 
module.exports = exports;