js資料處理 資料拷貝

2022-07-15 17:15:15 字數 1982 閱讀 6225

一、理解深拷貝與淺拷貝

如下**,把 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...