2014-06-13 123 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) 
}