陣列深拷貝 物件的深拷貝 陣列去重

2021-09-11 02:12:23 字數 1480 閱讀 5094

1、for 迴圈實現陣列的深拷貝

var arr = [1,2,3,4,5,6];

var arr2 = copyarr(arr );

function copyarr(arr ) var obj2 = copyobj(obj) function copyobj(obj) for (var key in obj) return res }

2、轉換成json再轉換成物件實現物件的深拷貝

var obj = var obj2 = json.parse(json.stringify(obj))

3、擴充套件運算子實現物件的深拷貝

var obj = var = obj

1、es6的語法

function dedupe(array) var arr = [1,2,2,3,3,4,4,5,5] console.log(dedupe(arr))

function unique (arr)

2、雙層迴圈

var array = [1, 1, '1', '1']; function unique(array) } // 如果array[i]是唯一的,那麼執行完迴圈,j等於reslen if (j === reslen) } return res; }

3、利用es6 set用方法不會新增重複值的特性,進行迴圈,然後加入新的陣列

const s= new set();

let arr=[1,2,2,3,3,5,6,2,5,6];

arr.foreach(function(x)) console.log(unique(array)); // [1, "1"]

1、使用jquery的extend方法

var o1 = , o2 = ;

// 則

var o3 =

o3 = $.extend(o1, o2)  // 合併 o1 和 o2, 將結果返回給 o3. 注意: 此時,o1 == o3! 即 o1 被修改

// 或

o3 = $.extend({}, o1, o2) // 合併 o1 和 o2, 將結果返回給 o3. 注意: 此時,o1 != o3! 即 o1 沒有被修改

2、用 object.assign();

var o1 = ;

var o2 = ;

var o3 = ;

var obj = object.assign(o1, o2, o3);

console.log(obj); //

console.log(o1);  // , 注意目標物件自身也會改變。

3、遍歷賦值法 

迴圈物件n中的每乙個對應屬性。

確認物件n中存在該屬性

確認物件o中不存在該屬性

var extend=function(o,n){

for (var p in n){

if(n.hasownproperty(p) && (!o.hasownproperty(p) ))

o[p]=n[p];

jq深拷貝陣列

通過傳遞第乙個引數true執行了深拷貝物件中的陣列 或者object 資訊.var person var man extend true,person,在工作中,經常需要深拷貝陣列。網路上大部分 都是靠for 迴圈來將值賦給新的array,遇到陣列中有objec還需要又for in一次,將屬性賦值新...

JS深拷貝陣列和物件

有時候在些js 時不小心直接給陣列和物件直接賦值,可能不會直接產生什麼 但若是遇到了奇怪的問題了,這很有可能就是在拷貝陣列或者物件時時進行淺拷貝,接受者在不知不覺地改變了某些元素的值,從而導致原始值就莫名其妙地被同步修改了 面對這種情況,最好對陣列或者物件進行深拷貝,為了不影響某些元素的丟失 比如某...

物件陣列的深拷貝和物件的深拷貝

1 對於 普通陣列 陣列元素為數字或者字串 深拷貝很簡單,拷貝之後兩個陣列指標指向的儲存位址不同,從而完成深拷貝 var test 1,2,3 原陣列 var testcopy concat test 拷貝陣列 testcopy 0 4 console.log test 1,2,3 console....