递归对象 - Javascript

时间:2015-10-06 02:14:10

标签: javascript recursion

假设我有以下对象:

var my_obj = {
    x: 0,
    y: [Object]
}

每次调用函数recurse_object时,我都会向my_obj添加另一个元素,并创建一个递归对象:

function recurse_object(my_obj) {
   if ("top" in my_obj) {
      var x = my_obj;
      my_obj = { top: x };
   } else {
     // missing test case. 
   }
   return my_obj;
}

以便在第一次通话后my_obj看起来像:

var my_obj = {
    top: { 
       x: 0,
       y: [Object]
    }
}

recurse_object的第二次调用将my_obj看起来像:

   var my_obj = {
      top: {
        top: { 
           x: 0,
           y1: [Object1]
        },
        x: 1,
        y2: [Object2]
      }
    }

x中的ymy_obj的值会发生变化。可以添加新属性y2。因此,我将获取当前my_obj并将其放入top,并将新元素复制到"new" my_obj。 我怎样才能在JS中实现这一目标?

1 个答案:

答案 0 :(得分:1)

你的功能似乎有点奇怪。如果我核心地理解你的问题,答案可能是这样的

function recurse_object(obj) {

    var key='top';
    if (obj.hasOwnProperty(key)) {
       //here we change the y
       var keys = Object.keys(obj.top);
       var count='';
       var currentCount='';
       //go through all keys to find y because we don't know exact name
       for(var k in keys){
          if(k.indexOf('y')==0){
              currentCount=k.substring(1);
              if(currentCount!='')
                 count=parseInt(currentCount)+1;
              else 
                 count=1; 
          }
       }
       var x=obj;
       obj['y'+count]=obj.['y'+currentCount];
       delete obj.['y'+currentCount];
       obj.top=x;
    }
    else{
       obj.top=obj;
    }
 }