Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套JSON迭代,超过最大调用堆栈大小_Javascript_Json_Recursion_Underscore.js_Jqxtreegrid - Fatal编程技术网

Javascript 嵌套JSON迭代,超过最大调用堆栈大小

Javascript 嵌套JSON迭代,超过最大调用堆栈大小,javascript,json,recursion,underscore.js,jqxtreegrid,Javascript,Json,Recursion,Underscore.js,Jqxtreegrid,我实现了一个递归函数来迭代嵌套的JSON。我面临的问题是它抛出了错误 超过最大调用堆栈 我实现的功能如下: function createTreeMap (treeCatalog){ var _this = this; _.each(treeCatalog, function (ele, inx){ if(typeof (ele) === "object"){ createTreeMap(ele); }else{ //I create anoth

我实现了一个递归函数来迭代嵌套的JSON。我面临的问题是它抛出了错误

超过最大调用堆栈

我实现的功能如下:

function createTreeMap (treeCatalog){
  var _this = this;

  _.each(treeCatalog, function (ele, inx){
    if(typeof (ele) === "object"){
      createTreeMap(ele);
    }else{
      //I create another JSON structure with the value as its property and its value as 1.
      _this.treeMap[ele] = 1;

    }
  });

}
我正在迭代的JSON看起来像这样

[{
    "EmployeeID": 2,
    "FirstName": "Andrew",
    "LastName": "Fuller",
    "Country": "USA",
    "Title": "Vice President, Sales",
    "HireDate": "1992-08-14 00:00:00",
    "BirthDate": "1952-02-19 00:00:00",
    "City": "Tacoma",
    "Address": "908 W. Capital Way",
    children: [{
        "EmployeeID": 8,
        "FirstName": "Laura",
        "LastName": "Callahan",
        "Country": "USA",
        "Title": "Inside Sales Coordinator",
        "HireDate": "1994-03-05 00:00:00",
        "BirthDate": "1958-01-09 00:00:00",
        "City": "Seattle",
        "Address": "4726 - 11th Ave. N.E."
    }, {
        "EmployeeID": 1,
        "FirstName": "Nancy",
        "LastName": "Davolio",
        "Country": "USA",
        "Title": "Sales Representative",
        "HireDate": "1992-05-01 00:00:00",
        "BirthDate": "1948-12-08 00:00:00",
        "City": "Seattle",
        "Address": "507 - 20th Ave. E.Apt. 2A"
    }, {
        "EmployeeID": 3,
        "FirstName": "Janet",
        "LastName": "Leverling",
        "Country": "USA",
        "Title": "Sales Representative",
        "HireDate": "1992-04-01 00:00:00",
        "BirthDate": "1963-08-30 00:00:00",
        "City": "Kirkland",
        "Address": "722 Moss Bay Blvd."
    }, {
        "EmployeeID": 4,
        "FirstName": "Margaret",
        "LastName": "Peacock",
        "Country": "USA",
        "Title": "Sales Representative",
        "HireDate": "1993-05-03 00:00:00",
        "BirthDate": "1937-09-19 00:00:00",
        "City": "Redmond",
        "Address": "4110 Old Redmond Rd."
    }, {
        "EmployeeID": 5,
        "FirstName": "Steven",
        "LastName": "Buchanan",
        "Country": "UK",
        "Title": "Sales Manager",
        "HireDate": "1993-10-17 00:00:00",
        "BirthDate": "1955-03-04 00:00:00",
        "City": "London",
        "Address": "14 Garrett Hill",
        "expanded": "true",
        children: [{
            "EmployeeID": 6,
            "FirstName": "Michael",
            "LastName": "Suyama",
            "Country": "UK",
            "Title": "Sales Representative",
            "HireDate": "1993-10-17 00:00:00",
            "BirthDate": "1963-07-02 00:00:00",
            "City": "London",
            "Address": "Coventry House Miner Rd."
        }, {
            "EmployeeID": 7,
            "FirstName": "Robert",
            "LastName": "King",
            "Country": "UK",
            "Title": "Sales Representative",
            "HireDate": "1994-01-02 00:00:00",
            "BirthDate": "1960-05-29 00:00:00",
            "City": "London",
            "Address": "Edgeham Hollow Winchester Way"
        },{
            "EmployeeID": 9,
            "FirstName": "Anne",
            "LastName": "Dodsworth",
            "Country": "UK",
            "Title": "Sales Representative",
            "HireDate": "1994-11-15 00:00:00",
            "BirthDate": "1966-01-27 00:00:00",
            "City": "London",
            "Address": "7 Houndstooth Rd."
        }]
    }]
}];
我的怀疑是类似的儿童财产名称。但是有没有合适的方法来解决这个问题,因为类似的孩子名字是一项要求

非常感谢:)

更新


这个示例模拟了我遇到的问题:

Hasitha,我认为您正在将要编目的对象(“ele”)放回函数本身

而不是

createTreeMap(ele);
试试这样的

createTreeMap(ele.child);

Hasitha,我认为您正在将要编目的对象(“ele”)放回函数本身

而不是

createTreeMap(ele);
试试这样的

createTreeMap(ele.child);

将源代码绑定到
jqxTreeGrid
it后,对其结构进行了一个小的更改:添加父属性和数据属性,其中数据-引用到self。
作为解决方法,为了避免无限递归,您需要忽略此属性,例如

function iterate (obj){
    _.each(obj, function(ele, inx){
        if(typeof (ele) === "object" && ele !== obj && inx !== 'parent'){
            iterate(ele);
        }else{
            console.log(ele);
        }
    });
}
var员工=
[{
“雇员ID”:2,
“名字”:“安德鲁”,
“姓氏”:“Fuller”,
“国家”:“美国”,
“职务”:“销售副总裁”,
“雇佣关系”:“1992-08-14 00:00:00”,
“出生日期”:“1952-02-19 00:00:00”,
“城市”:“塔科马”,
“地址”:“首都西路908号”,
儿童:[{
“雇员ID”:8,
“名字”:“劳拉”,
“姓氏”:“卡拉汉”,
“国家”:“美国”,
“职务”:“内部销售协调员”,
“雇佣关系”:“1994-03-05 00:00:00”,
“出生日期”:“1958-01-09 00:00:00”,
“城市”:“西雅图”,
“地址”:“东北第11大道4726号”
}, {
“雇员ID”:1,
“名字”:“南希”,
“姓氏”:“达沃利奥”,
“国家”:“美国”,
“职务”:“销售代表”,
“雇佣关系”:“1992-05-01 00:00:00”,
“生日”:“1948-12-08 00:00:00”,
“城市”:“西雅图”,
“地址”:“东区第20大道507号2A室”
}, {
“雇员ID”:3,
“名字”:“珍妮特”,
“姓氏”:“Leverling”,
“国家”:“美国”,
“职务”:“销售代表”,
“雇佣关系”:“1992-04-01 00:00:00”,
“出生日期”:“1963-08-30 00:00:00”,
“城市”:“科克兰”,
“地址”:“莫斯湾大道722号”
}, {
“雇员ID”:4,
“名字”:“玛格丽特”,
“姓氏”:“孔雀”,
“国家”:“美国”,
“职务”:“销售代表”,
“雇佣关系”:“1993-05-03 00:00:00”,
“出生日期”:“1937-09-19 00:00:00”,
“城市”:“雷蒙德”,
“地址:”“老雷德蒙德路4110号。”
}, {
“雇员ID”:5,
“名字”:“史蒂文”,
“姓氏”:“布坎南”,
“国家”:“英国”,
“职务”:“销售经理”,
“雇佣关系”:“1993-10-17 00:00:00”,
“出生日期”:“1955-03-04 00:00:00”,
“城市”:“伦敦”,
“地址”:“加勒特山14号”,
“扩展”:“真”,
儿童:[{
“雇员ID”:6,
“名字”:“迈克尔”,
“姓氏”:“Suyama”,
“国家”:“英国”,
“职务”:“销售代表”,
“雇佣关系”:“1993-10-17 00:00:00”,
“出生日期”:“1963-07-02 00:00:00”,
“城市”:“伦敦”,
“地址”:“考文垂大厦矿工路”
}, {
“雇员ID”:7,
“名字”:“罗伯特”,
“姓氏”:“国王”,
“国家”:“英国”,
“职务”:“销售代表”,
“雇佣关系”:“1994-01-02 00:00:00”,
“出生日期”:“1960-05-29 00:00:00”,
“城市”:“伦敦”,
“地址”:“Edgeham Hollow Winchester路”
}, {
“雇员ID”:9,
“名字”:“安妮”,
“LastName”:“Dodsworth”,
“国家”:“英国”,
“职务”:“销售代表”,
“雇佣关系”:“1994-11-15 00:00:00”,
“出生日期”:“1966-01-27 00:00:00”,
“城市”:“伦敦”,
地址:“猎犬齿路7号”
}]
}]
}];
////准备数据
变量源={
数据类型:“json”,
数据字段:[{
姓名:'EmployeeID',
键入:“数字”
}, {
姓名:'FirstName',
键入:“字符串”
}, {
名称:“LastName”,
键入:“字符串”
}, {
名称:'国家',
键入:“字符串”
}, {
名称:'城市',
键入:“字符串”
}, {
姓名:'地址',
键入:“字符串”
}, {
姓名:'头衔',
键入:“字符串”
}, {
姓名:'雇佣',
键入:“日期”
}, {
姓名:'儿童',
类型:“数组”
}, {
名称:'扩展',
类型:“bool”
}, {
姓名:'生日',
键入:“日期”
}],
层次结构:{
根:“儿童”
},
id:“EmployeeID”,
本地数据:员工
};
var dataAdapter=new$.jqx.dataAdapter(源);
//创建树栅格
$(“#treeGrid”).jqxTreeGrid({
宽度:680,
来源:dataAdapter,
是的,
可过滤:正确,
主题:“能量蓝”,
栏目:[{
文本:“名字”,
数据字段:“名字”,
宽度:150
}, {
文本:“LastName”,
数据字段:“LastName”,
wi