zoukankan      html  css  js  c++  java
  • 解决JSON.stringify序列化循环依赖对象报错

    重写stringify 解决序列化循环依赖对象报错,解决方式,对已访问对象建立索引,已访问过的对象不再处理

    var stringify = (function () {
        var toString = Object.prototype.toString;
        var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; };
        var escMap = { '"': '\"', '\': '\\', '': '\b', 'f': '\f', '
    ': '\n', '
    ': '\r', '	': '\t' };
        var escFunc = function (m) { return escMap[m] || '\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); };
        var escRE = /[\"u0000-u001Fu2028u2029]/g;
        var visitedObjs = [];
        return function stringify(value) {
            if (value == null) {
                return 'null';
            } else if (typeof value === 'number') {
                return isFinite(value) ? value.toString() : 'null';
            } else if (typeof value === 'boolean') {
                return value.toString();
            } else if (typeof value === 'object') {
                if (typeof value.toJSON === 'function') {
                    return stringify(value.toJSON());
                } else if (isArray(value)) {
                    var res = '[';
                    for (var i = 0; i < value.length; i++)
                        res += (i ? ', ' : '') + stringify(value[i]);
                    return res + ']';
                } else if (toString.call(value) === '[object Object]') {
                    if (visitedObjs.indexOf(value) > -1) {
                        return '[Visited Object]';
                    } else {
                        visitedObjs.push(value);
                        var tmp = [];
                        for (var k in value) {
                            if (value.hasOwnProperty(k))
                                tmp.push(stringify(k) + ': ' + stringify(value[k]));
                        }
                        return '{' + tmp.join(', ') + '}';
                    }
                }
            }
            return '"' + value.toString().replace(escRE, escFunc) + '"';
        };
    })();

    本文来自博客园,作者:广林,转载请注明原文链接:https://www.cnblogs.com/guanglin/p/14517510.html

  • 相关阅读:
    Codeforces Round #276 (Div. 1) D. Kindergarten dp
    Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
    hihoCoder Challenge 27 #1469 : 福字 dp
    Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 括号序列 dp+栈
    Python id() 函数
    Python divmod() 函数
    Python any() 函数
    Python next() 函数
    Python slice() 函数
    Python3 hex() 函数
  • 原文地址:https://www.cnblogs.com/guanglin/p/14517510.html
Copyright © 2011-2022 走看看