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....