有个关于forEach 很奇怪的问题,第一次遇到,想请大家帮忙看看,谢谢?

.then(res=>{

let data = res.data.data

this.fileList1 = data.memorandum_img

let price_url = this.price_url

this.fileList1.forEach(function(item){

item.url = price_url + item.url

})

console.log(this.fileList1,'this.fileList1111')

console.log(res,'res88')

})

我forEach this.fileList1 这个数组对象,给里面的一个item.url属性拼接了一个url字符串,
console.log(this.fileList1,'this.fileList1111') 这个结果是我想要的,也是拼接后的数据

但是 console.log(res,'res88') 这里也变成了拼接后的数据,正常显示应该是没拼接的数据,当我把

this.fileList1.forEach(function(item){

item.url = price_url + item.url

})

注释后, console.log(res,'res88') 这时候打印才是没拼接的数据,

难道forEach 循环 改变属性值 ,还会影响res里的数据吗?我第一次遇到,请问这是什么原因?如何解决呢?


回答:

  1. 将 forEach 替换为 map 方法,同时使用一个变量去接收 map 方法的结果
  2. 将 res.data.data 深克隆给 data 变量,而不是直接使用 = 去赋值


回答:

js中数组,和JSON(键值对)都是引用类型。也就是说,改变其中一个,另一个也会跟着变。就像多个人使用同一张银行卡一样,任意一个人用了钱,卡里的钱都会变少

var a = [1,2,3]

var b = a

b[0] = '张三'

// a 和 b 都会变

console.log("结果", a, b)

如果要解决,就需要深度clone


回答:

let data = res.data.data

你这里的

data 和 res.data.data 是一个东西,在内存里是一个地址;


回答:

这个是个很基础的问题,我这样举个例子你看下能理解不

const a = { url: 'a.jpg' }

const b = { url: 'b.jpg' }

const data = [a, b]

const fileList1 = data;

fileList1.forEach((item, index) => {

// 关键点,我们这里用第一项来分析,此时 item 即是 a

item.url = index

// 那么上面的操作就等价于 a.url = index

})

console.log(a); // { url: 0 }

console.log(b); // { url: 1 }

console.log(data); // [{ url: 0 }, { url: 1 }]

console.log(fileList1); // [{ url: 0 }, { url: 1 }]

顺便可以去了解一下 引用类型 的变量在内存中是如何存储的

以上是 有个关于forEach 很奇怪的问题,第一次遇到,想请大家帮忙看看,谢谢? 的全部内容, 来源链接: utcz.com/p/933057.html

回到顶部