2013-05-31 48 views
4

我想從JSON對象中刪除一個對象。有沒有簡單的方法來做到這一點?如果我有一個對象,我可以從中刪除該項目,還是將對象轉換爲數組並將其拼接更好?每個的優點和缺點是什麼。如何從JSON對象中刪除對象?

我想寫的邏輯是這樣的。

function remove(delKey, delVal, o, stack){ 
    for(var key in o) { 
     if(typeof o[key] === "object") { 
      stack != undefined ? stack += "." + key : stack = key; 
      remove(delKey, delVal, o[key], stack); 
     } else { 
      if(delKey == key && delVal == o[key]) {  
       delete o; 
      } 
     } 
    } 
} 

改變代碼,使用刪除,而不是拼接

所以這基本上是我想怎樣做,如果有一個更簡單的方法,那麼請讓我知道。我在這裏遇到的問題是A.我不知道拼接在哪裏。 B.如果我拼接,我認爲我不會通過遞歸返回到其他對象的拼接結果。

我的問題是因爲每次我不知道嵌套屬性時我將有不同的JSON。這就是我使用堆棧變量的原因。堆棧會嵌套屬性。所以如果我想刪除一個蘋果的顏色,堆棧將是json.fruit.apple.color。但它不是一個對象。

無論如何,沒有人有更好的解決方案從JSON刪除對象?

+5

您正在尋找'delete'運算符。 – SLaks

+0

當然,好吧,我也嘗試過。但如果我只是嘗試刪除o;這是行不通的。 – recneps

+2

您還需要學習如何使用'delete'運算符。請參閱MDN的文檔。 – SLaks

回答

2

希望這有助於有人從這種掙扎別人。感謝球員的幫助。

下面是我的答案和功能,這對我有效。它足夠抽象,希望能幫助別人。

如果您通過此函數想要刪除任何鍵值對和解析的JSON對象,它將刪除它並返回true,如果該項目被發現並刪除。

function remove(delKey, delVal, o) { 
     for (var key in o) { 
      if (typeof o[key] === "object") { 
       if (remove(delKey, delVal, o[key])) { return true; } 
      } else { 
       if (delKey == key && delVal == o[key]) { 
        delete o[key]; 
        return true; 
       } 
      } 
     } 
    } 
4
+0

好的,我明白了。但我不確定要刪除什麼。在這種情況下,請參閱堆棧,其中的對象是一個字符串,但不是實際的對象。如果我只是用delete o替換拼接;它不會從JSON中刪除它。我的問題是我無法刪除確切的項目。 – recneps

+1

我不確定我得到了一切。但也許這可以幫助你: 如果你有一個存儲在變量中的密鑰的值,你可以這樣做: stack [key]來訪問對象堆棧的屬性鍵 – Antoine