复制有层次性,针对引用数据类型
深复制:从表面复制到原型,复制对象拥有控制自身属性而不影响别的被复制对象属性
浅复制:只复制表面,复制对象和被复制对象,任何一个修改都会影响对方
浅复制*:
- 解构
var objcopy=[...arr]
- Object.assign()
var objcopy=Object.assign([],arr)
- arr.slice()
var objcopy=arr.slice(0)
- arr.contact()
var objcopy=[].contact(arr)
- for循环遍历复制
for(var item of arr){
objcopy[item]=arr[item];
}
深复制
- 方法一:
var objcopy={
__proto__:Object.getPropertyOf(obj);
...obj
}
- 方法二:
Object.create(prop,[propertyValue])
创建新的对象原型对象为现有对象
prop:现有的对象,作为新建对象的__proto__属性
propertyValue:新建对象的自身属性,默认不可枚举
var objcopy=Object.create(Object.getPropertyOf(obj),
Object.getOwnPropertyDescriptors(obj)),
- 方法三:使用
Object.assign()
将源对象的内容,复制大目标对象
var objcopy=Object.assign(Object.getProperty(obj),obj);
- 方法四:
序列化与反序列化
JSON的格式需要注意
var objcopy=JSON.parse(JSON.stringify(obj))
// 交集
var set1= [1,2,3,4,56,7],set2=[3,4,56,7,8,9]
let s2=set1.filter(item=>{
return set2.includes(item)
})
console.log(s2);
// 并集
let s3 =[...new Set(set1.concat(set2))]
console.log(s3)
// 差集 并集 -交集
let s4 = s3.filter(item=>{
return !s2.includes(item)
})
console.log(s4)