使用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)
得出结果:
后来改了一下写法,不会改变原数组了。但还是有点疑惑为什么上面的写法会把原数组改变了。
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)
上面的操作其实我的目的就是想快速去除数组的对象里面某个元素。自从发现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)
对象是引用类型,你
map
里面没有切断引用直接delete
,因为指向的还是同一个地址,肯定会影响源数据。在
es6
中去掉递归对象某个属性还是比较容易的var brr = arr.map(({id, ...v}) => v);