Javascript 嵌套JSON迭代,超过最大调用堆栈大小
我实现了一个递归函数来迭代嵌套的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
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