//------------深拷贝浅拷贝------------
// 对象浅拷贝指的是指针的拷贝 他们任然指向同一个内存空间 所以他们只要有一个变化另一个也会跟这变
// 对象深拷贝指的是指针和内存空间的拷贝 由于拷贝出了新的内存空间 所以原来对象和新拷贝的对象之间不会影响
// 对象浅拷贝指的是指针的拷贝 他们任然指向同一个内存空间 所以他们只要有一个变化另一个也会跟这变
// 对象深拷贝指的是指针和内存空间的拷贝 由于拷贝出了新的内存空间 所以原来对象和新拷贝的对象之间不会影响
//浅拷贝 直接复值
let arr = {name:'li',age:25}
let crr = arr;
console.log(crr)
arr.age = 23;
console.log(crr)
//深拷贝 ...扩展运算符
let brr = {...arr}
console.log(brr)
arr.name = 'cahi'
console.log(brr)
console.log(arr)
//深拷贝 Object.assign()
let drr = Object.assign({},arr)
console.log(drr)
arr.name = 'zhang'
console.log(drr)
深拷贝 JSON.parse(JSON.stringify(arr))
let err = JSON.parse(JSON.stringify(arr));
console.log(err)
arr.name = "bian"
err.name = "e"
console.log(err)
//------------合并数组------------
let a = [1,2]
let b = [3,4]
let c = a.concat(b)
console.log(c)
let d = [...a,...b]
console.log(d)
let a1 = [...a]
console.log(a.toString() == a1.toString())
//------------数组去重------------
//定义一个新数组 遍历需要去重的数组 用indexOf()判断新数组中是否有这个值 如果没有就加入新数组里
let arronly = [1,15,5,4,3,4,5,26,5,3,79]
function fn(arr) {
let arrnew =[];
for(let i=0;i<arr.length;i++){
if(arrnew.indexOf(arr[i])== -1){
arrnew.push(arr[i])
}
}
return arrnew
}
console.log(fn(arronly))
// new Set去重 ...扩展操作符将其转化为数组
let arrnew1 = [...new Set(arronly)]
console.log(arrnew1)
// new Set去重 Array.from()将其转化为数组
let arrnew2 = Array.from(new Set(arronly))
console.log(arrnew2)
//------------数组排序------------
let sor = arronly.sort(function (a,b) {
//-------- 写法一 --------------
//return a-b
// -------- 写法二 --------------
// return a>b ? 1 : -1
// -------- 写法三 --------------
if(a>b){
return 1
}else {
return -1
}
})
console.log(sor)
// eg:请按商品价格升序排序
let paiarr = [
{name:'辣条',price:4},
{name:'哇哈哈',price:22},
{name:'牛奶',price:3},
{name:'苹果',price:18},
{name:'牛肉',price:20}
]
let parnew = paiarr.sort(function (a,b) {
return a.price - b.price
})
console.log(parnew)
//------------数组乱序 随机产生------------
//sort() 返回随机产生的1或-1 (数据过大 计算时间会加长 随机度也分布不均)
let arrluan = [1,2,3,4,5,6,7]
let arrlunnew = arrluan.sort(function () {
return Math.random()-0.5
})
console.log(arrlunnew)
//splice 思路:Math.random*arr.length产生随机下标 用push装入新数组· 用splice删除装入新数组中的数 最后合并新旧数组
let arrluan1 = [];
for (let i=0;i<arrluan.length;i++){
let index = parseInt(Math.random()* arrluan.length); //随机下标
arrluan1.push(arrluan[index]); //将随机出的元素,存放新数组arrluan1中去
arrluan.splice(index,1) ; //将随机出的元素在arrluan中删除
}
console.log(arrluan1,arrluan)
let arrall = [...arrluan,...arrluan1]
console.log(arrall)
// 洗牌算法
...