问答

map方法里面使用delete,为什么会改变原数组

作者:admin 2021-09-10 我要评论

使用map是返回一个新的数组的,我写了以下代码,发现虽然达到了我要删除数组的对象里面的指定元素了。但这个直接改变了我原数组。这让我不解,希望小伙伴能解答...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

使用map是返回一个新的数组的,我写了以下代码,发现虽然达到了我要删除数组的对象里面的指定元素了。但这个直接改变了我原数组。这让我不解,希望小伙伴能解答一下我这个菜狗的疑惑……

var arr = [{id:1,name:'coco'},{id:2,name:'gogo'}]
var brr = arr.map(v=>{
    delete v.id
    return v
})
console.log(arr,brr)

得出结果:
image.png

后来改了一下写法,不会改变原数组了。但还是有点疑惑为什么上面的写法会把原数组改变了。

var arr = [{id:1,name:'coco'},{id:2,name:'gogo'}]
var brr = arr.map(v=>{
    var obj = {
      ...v
    }
    delete obj.id
    return obj
})
console.log(arr,brr)

image.png

上面的操作其实我的目的就是想快速去除数组的对象里面某个元素。自从发现delete不安全之后,我就用比较笨的方法去实现了↓。各位有没有其他更好的方案可以提供一下,以达到快速去除数组的对象里面某个元素呢?

var arr = [{id:1,name:'coco',age:20},{id:2,name:'gogo',age:18}]
var brr = arr.map(v=>{
    return {
      name:v.name,
      age:v.age
    }
})
console.log(arr,brr)

image.png

###

对象是引用类型,你map里面没有切断引用直接delete,因为指向的还是同一个地址,肯定会影响源数据。

es6中去掉递归对象某个属性还是比较容易的
var brr = arr.map(({id, ...v}) => v);

###

你得看map的实现,他的循环是使用next(index+1,data[index+1]),所以当你使用delete时循环会跳过一次,然后return的就少了一次

###

arr 里面的是对象 引用类型呀

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • map方法里面使用delete,为什么会改变

    map方法里面使用delete,为什么会改变

  • epoll的ET模式与LT模式在多线程下是否

    epoll的ET模式与LT模式在多线程下是否

  • react 复杂城市组件

    react 复杂城市组件

  • 请教一下Twisted库里的TCPServer问题,

    请教一下Twisted库里的TCPServer问题,

腾讯云代理商
海外云服务器