2014-06-13 67 views
0

My Fiddle删除对象或设置为null

没有出现这一切都在控制台的屏幕上。

The Rundown: 所以这是我正在开发的一个项目。基本上我试图将脚本顶部的巨大对象解构成包含所有必需数据的小对象(代码中的wholeObject)。这样我可以在这个项目的下一步中重建它们。

现在这是产生一个无限循环,但我在这里要做的是到达(靠近)底部的树,并在底部存储所需的对象的路径,所以我可以存储整个对象与我想要的所有数据。然后,在我这样做之后,我想从较大的对象中删除该对象,以便我再也找不到它并重复该过程,以获得可能位于较大对象中的尽可能多的对象,直到没有任何东西剩下为止,此时I我完成了这个阶段。

现在的问题是,我不知道如何从较大的对象中删除该对象,以便它找到相同的对象。我试着将它设置为null和delete关键字。据我可以告诉我什么时候在我的“r.removeLowest”方法中对那些“obj”中的任何一个进行赋值,它只是将更改应用于obj变量而不是它引用的内容(树中的对象/更大目的)。

任何帮助将不胜感激我会在夜晚的大部分时间和常规检查。

测试以下对象:

//test object 
var sample = {"Ocean Event": 
       {"2001": 
        {"Pacific": 
         [{"start":10,"end":30,"magnitude":7},{"start":31,"end":39,"magnitude":9},{"start":40,"end":60,"magnitude":5},{"start":80,"end":90,"magnitude":3},], 
         "Atlantic": 
          [{"start":10,"end":30,"magnitude":3},{"start":40,"end":60,"magnitude":7},{"start":70,"end":90,"magnitude":3}], 
         "Indian": 
          [{"start":0,"end":30,"magnitude":7},{"start":35,"end":60,"magnitude":5},{"start":650,"end":90,"magnitude":3}] 
        }, 
        "2002":{"Pacific": 
         [{"start":10,"end":30,"magnitude":7},{"start":40,"end":60,"magnitude":5},{"start":80,"end":90,"magnitude":3}], 
         "Atlantic": 
          [{"start":10,"end":60,"magnitude":3},{"start":40,"end":60,"magnitude":7},{"start":70,"end":90,"magnitude":3}], 
         "Indian": 
          [{"start":0,"end":30,"magnitude":7},{"start":35,"end":60,"magnitude":5},{"start":65,"end":90,"magnitude":3}] 
        }, 
        "2003":{"Pacific": 
         [{"start":5,"end":30,"magnitude":7},{"start":40,"end":70,"magnitude":5},{"start":80,"end":90,"magnitude":3}], 
         "Atlantic": 
          [{"start":5,"end":30,"magnitude":3},{"start":40,"end":45,"magnitude":7},{"start":70,"end":90,"magnitude":3}], 
         "Indian": 
          [{"start":10,"end":30,"magnitude":7},{"start":35,"end":60,"magnitude":5},{"start":65,"end":90,"magnitude":3}] 
        } 
       }, 
       "Crime Data": 
        {"2001": 
         {"New York": 
          [{"start":10,"end":30,"magnitude":7},{"start":40,"end":60,"magnitude":5},{"start":80,"end":90,"magnitude":3}], 
          "Atlanta": 
           [{"start":10,"end":60,"magnitude":3},{"start":40,"end":60,"magnitude":7},{"start":70,"end":90,"magnitude":3}], 
          "Bangor": 
           [{"start":0,"end":30,"magnitude":7},{"start":35,"end":60,"magnitude":5},{"start":65,"end":90,"magnitude":3}] 
         }, 
         "2002":{"New York": 
          [{"start":10,"end":30,"magnitude":7},{"start":40,"end":60,"magnitude":5},{"start":80,"end":90,"magnitude":3}], 
          "Atlanta": 
           [{"start":10,"end":30,"magnitude":3},{"start":40,"end":60,"magnitude":7},{"start":70,"end":90,"magnitude":3}], 
          "Bangor": 
           [{"start":0,"end":30,"magnitude":7},{"start":35,"end":60,"magnitude":5},{"start":65,"end":90,"magnitude":3}] 
         }, 
         "2003":{"New York": 
          [{"start":5,"end":30,"magnitude":7},{"start":40,"end":70,"magnitude":5},{"start":80,"end":90,"magnitude":3}, {"start":91,"end":95,"magnitude":8}], 
          "Atlanta": 
           [{"start":5,"end":30,"magnitude":3},{"start":40,"end":45,"magnitude":7},{"start":70,"end":90,"magnitude":3}], 
          "Bangor": 
           [{"start":10,"end":30,"magnitude":7},{"start":35,"end":60,"magnitude":5},{"start":65,"end":90,"magnitude":3}] 
         } 
        } 
       } 

脚本如下:

var clone = $.extend(true, {}, sample); 

//class 
function reduceObjectToComponents (obj) { 
var r = this 
r.keys = [] 
r.wholeObjects = [] 
r.root = $.extend(true, {}, obj) 

r.dig = function (node) { 
    if(typeof node === 'object'){ 
     if(Object.keys(node).length>0 && typeof node.start === 'undefined' && node!=null){ 
      r.keys.push(Object.keys(node)[0]) 
      r.dig(r.getLatest()) 
     } else { 
      r.storeWhole(node, r.keys) 
     } 
    } 
} 

r.storeWhole = function (dataObj, path) { 
    var wholeObject = {} 
    wholeObject.dimension1 = path[0]; 
    wholeObject.dimension2 = path[1]; 
    wholeObject.dimension3 = path[2]; 
    wholeObject.datum = dataObj; 
    console.log(wholeObject) 
    r.wholeObjects.push(wholeObject) 
    r.removeLowest() 
    console.log(r.root) 
    console.log(r.keys) 
    r.keys = [] 
    r.dig(r.root) 
} 

r.removeLowest = function() { 
    var obj = r.root 
    for (var i = 0; i < r.keys.length; i++) { 
     obj = obj[r.keys[i]] 
    } 
    console.log(obj) 
    obj = null 
    console.log(obj) 
} 

r.getLatest = function() { 
    var obj = r.root 
    for (var i = 0; i < r.keys.length; i++) { 
     obj = obj[r.keys[i]] 
    } 
    return obj 
} 

r.dig(obj) 
} 
var t = new reduceObjectToComponents(clone) 

回答

1

,因为你一直在打电话storeWholer.dig(r.root)你有一个无限循环。 我简化了你的代码,它似乎正确地遍历你的结构(并且你不需要删除任何东西):

r.dig = function (node) { 
    if(typeof node === 'object'){ 
     if(Object.keys(node).length>0 && typeof node.start === 'undefined' && node!=null){ 
      for(key in node){ 
       r.keys.push(key); 
       r.dig(node[key]); 
       r.keys.pop(); 
      } 
     } else { 
      r.storeWhole(node, r.keys) 
     } 
    } 
} 

r.storeWhole = function (dataObj, path) { 
    var wholeObject = {} 
    wholeObject.dimension1 = path[0]; 
    wholeObject.dimension2 = path[1]; 
    wholeObject.dimension3 = path[2]; 
    wholeObject.datum = dataObj; 
    r.wholeObjects.push(wholeObject) 
    console.log(r.keys) 
}