一、理解深拷貝與淺拷貝
如下**,把 a 的值賦給 b ,修改 b 的值會直接修改到 a 的值,這叫淺拷貝。(其實他們修改的是同乙個物件)
var a = [1,2,3,4,5];var b = a;
b[2] = 100;
console.log(a); //[1,2,100,4,5]
console.log(b); //[1,2,100,4,5]
把 obj1 的值賦給 obj2 ,修改 obj2 的值,不會影響到 obj1 的值 ,這叫深拷貝
var obj1 = [1,2,3,4,5]var obj2 = ;
for(var i = 0; i < obj1.length; i++)
obj2[2] = 100
console.log(obj1); //[1,2,3,4,5]
console.log(obj2) //[1,2,100,4,5]
二、深度拷貝的多種情況
這裡我列舉以下幾種例子,在以下的拷貝方法裡也會將各種方法做乙個比較,例子如下
var obj1 =var obj2 = ,
getnum: function(),
numarr:["貓","狗","雞"]
}var arr1 = [1,2,3,4,5,"六","七"]
var arr2 = [ ,
]
方法一:轉為json格式
親測:obj1,arr1,arr2 均有效,obj2無效,
原因:這種方法的缺陷是會破壞原型鏈,並且無法拷貝屬性值為function的屬性
var copyobj2 = json.parse(json.stringify(obj1))copyobj2.name = "哈哈"
console.log(obj1) //
console.log(copyobj2) //
方法二:採用遞迴的方式
親測均有效
function copy(obj1, obj2) ;for(var name in obj1) ;
copy(obj1[name], obj2[name]);
} else
} return obj2;
}var copyobj2 = {}
copyobj2 = copy(obj2,copyobj2);
copyobj2.getnum = function()
console.log(obj2.getnum()) //10
console.log(copyobj2.getnum()) //單身狗
其他方法;
一、假如你用jquery,可以使用$.extend()
親測均有效
var copyarr = $.extend(true, , arr1);copyarr[1] = "888"
console.log(copyarr); //[1,888,3,4,5,六,七]
console.log(arr1); //[1,2,3,4,5,六,七]
var copyarr = $.extend(true, {}, obj2);copyarr.getnum = function()
console.log(copyarr.getnum()); //這是測試
console.log(obj2.getnum()); //10
資料處理 流資料處理利器
流處理 stream processing 是一種計算機程式設計正規化,其允許給定乙個資料序列 流處理資料來源 一系列資料操作 函式 被應用到流中的每個元素。同時流處理工具可以顯著提高程式設計師的開發效率,允許他們編寫有效 乾淨和簡潔的 流資料處理在我們的日常工作中非常常見,舉個例子,我們在業務開發...
爬蟲 資料處理 pandas資料處理
使用duplicated 函式檢測重複的行,返回元素為布林型別的series物件,每個元素對應一行,如果該行不是第一次出現,則元素為true keep引數 指定保留哪一重複的行資料 dataframe替換操作 使用df.std 函式可以求得dataframe物件每一列的標準差 資料清洗清洗重複值 清...
Vue樹形資料處理 js
當前需求 層級列表中選中某個元素,則獲取最底層子集id,並用逗號連線 1,2,3,4,5 let data 遍歷方法可參考 寫的很詳細 具體操作 首先找到選擇元素的id在樹形資料中的位置,並獲取他 findsameid tree,id if id tree i id isget deepsearch...