原始对象受克隆变量减少变化的影响

时间:2018-05-14 08:52:07

标签: javascript arrays dojo javascript-objects

我有一个下面的代码,每次减少它引用我的相同数组后,如何解决这个

var myobjData = data[0];

var obj = myobjData;
var arr = ['index', 'label', '__id', 'id', '__parent', '__proto__'];

var colObjLength = shorten(arr, obj);

function shorten(arr, obj) {
  arr.forEach(function(key) {
    delete obj[key];
  });
  console.log(obj);
  return obj;
}
由于此代码,data[0]会受到影响。它不应该影响data[0]

1 个答案:

答案 0 :(得分:1)

使用oroder中的dojo/_base/lang .clone()方法创建obj的克隆,然后根据需要执行此操作,这样原始对象就不会受到影响,

注意:删除密钥 proto 是没用的,因为它定义了对象的原型,请参阅here

在工作片段

下面



require(["dojo/_base/lang"], function(lang) {

  var arr = ['index', 'label', '__id', 'id', '__parent', '__proto__'];

  var obj = new Object();
  obj.index = "index";
  obj.label = "label";
  obj.__id = "1";
  obj.id = "id";
  obj.__parent = "__parent";
  
  //perform clone 
  var colObjLength = lang.clone(obj);

  colObjLength = shorten(arr,colObjLength);
  
  console.log("Original object",obj);
  console.log("Cloned object",colObjLength);




  function shorten(arr, obj) {
    arr.forEach(function(key) {
      delete obj[key];
    });
    return obj;
  }

});

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
&#13;
&#13;
&#13;