2014-09-23 46 views
1

我需要保持對象的整體佈局。我將它傳遞到的方法和:從javascript對象中移除元素

  1. 我需要從對象中刪除的東西,然後做一些事情,
  2. 一旦我回到主功能我是
  3. 我需要的對象是不變。

它現在設置的方式將其從主對象以及底部方法中的一箇中刪除。 SEE的jsfiddle代碼http://jsfiddle.net/rwux4rta/要想從運行結果,請參見控制檯

請幫助!

$(document).ready(function() { 
    var pList = new Object(); 
    pList["test"] = "test"; //this is being deleted from BOTH instances of the Obj 
    pList["test1"] = "test1"; 
    pList["test2"] = "test2"; 
    pList["test3"] = "test3"; 
    pList["test4"] = "test4"; 

    displayData(pList); 

    console.log(pList); 
}); 

function displayData(badData){ 
    badData.test.removeData(); 

    console.log(badData); 
} 
+0

什麼是你需要解決的實際問題?你所要求的似乎是試圖解決一個無法解決的問題。 – Pete 2014-09-23 23:53:14

+0

我需要pList.test不要從頂部刪除,只能從badData中刪除。這樣做實際上是從兩個都刪除... @Pete – 2014-09-23 23:54:22

回答

1

嘗試

$(document).ready(function() { 
    var pList = new Object(); 
    pList["test"] = "test"; //this is being deleted from BOTH instances of the Obj 
    pList["test1"] = "test1"; 
    pList["test2"] = "test2"; 
    pList["test3"] = "test3"; 
    pList["test4"] = "test4"; 
    // extend `pList` to `_pList` object 
    var _pList = $.extend({}, pList); 
    displayData(_pList); 

    console.log(pList, "original"); 
}); 

function displayData(badData){ 
    delete badData.test; 

    console.log(badData, "extended"); 
} 

的jsfiddle http://jsfiddle.net/guest271314/rwux4rta/6/

+0

我實際上只是2秒,發佈這個我的自我。非常感謝你的幫助,這似乎是乾淨的,並伎倆! – 2014-09-24 00:54:06

+0

歡迎你:) – guest271314 2014-09-24 02:36:05

1

換句話說,您的問題是問如何通過值傳遞JavaScript對象,而不是通過引用。默認情況下,JavaScript通過引用傳遞所有對象,因此如您所知,在函數中對該對象的任何修改都會影響原始對象。

退房此線程來看看如何通過價值實現了一通:

JavaScript: How to pass object by value?

1

您可以克隆的對象刪除「壞」的數據之前。我使用以下函數根據這裏找到的建議克隆一個對象https://stackoverflow.com/a/728694/1143670

function clone(obj) { 
    if (null == obj || "object" != typeof obj) return obj; 
    var copy = obj.constructor(); 
    for (var attr in obj) { 
     if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; 
    } 
    return copy; 
} 

您需要更新displayData函數,以便克隆進入「badData」參數的數據。

function displayData(badData){ 
    var newBadData = clone(badData); 

    delete newBadData.test; 

    console.log(newBadData); 
} 

其餘的應該保持不變,這只是在鉻測試。有關工作示例,請參閱此fiddle