繁体   English   中英

从javascript对象中删除元素

[英]Remove element from javascript Object

我需要保持对象的整体布局。 我把它传递给一个方法,并且:

  1. 我需要从对象中删除东西,然后做一些事情,
  2. 一旦我回到我所在的主要功能
  3. 我需要对象是UNTOUCHED。

现在它的设置方式是从主对象以及底部方法中删除它。 请参阅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);
}

换句话说,您的问题是询问如何按值传递JavaScript对象,而不是通过引用传递。 默认情况下,JavaScript通过引用传递所有对象,因此您已经注意到,对函数中该对象的任何修改也会影响原始对象。

查看此主题以了解如何通过值完成传递:

JavaScript:如何按值传递对象?

您可以在删除“错误”数据之前克隆该对象。 我使用以下函数根据此处的建议克隆对象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);
}

其余应该保持不变,这只是在铬测试。 看一下这个小提琴的工作实例。

尝试

 $(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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM