簡體   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