2014-09-23 110 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