深拷贝浅拷贝,合并数组,数组去重,数组排序,数组乱序 随机产生

//------------深拷贝浅拷贝------------
// 对象浅拷贝指的是指针的拷贝 他们任然指向同一个内存空间  所以他们只要有一个变化另一个也会跟这变
// 对象深拷贝指的是指针和内存空间的拷贝  由于拷贝出了新的内存空间  所以原来对象和新拷贝的对象之间不会影响


 

//浅拷贝 直接复值
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)

// 洗牌算法
...

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值