【开发路上的坑合集】

1、数组的修改

需求:对数组中每个元素的某个属性修改其值
错误代码:直接对数组每项中的值修改了,
原因:数组的地址没变就不会改变到数组

this.arr.forEach((item) => {
	item.name = item.name + '学生'	
})

正确做法
map() - 创建一个新数组,其中的元素是原数组经过某个函数处理后的结果。

const resultArr = this.arr.map(item => {
	item.name = item.name + '学生'
    return item
})
this.arr = [...this.arr, ...resultArr]

知识点
1.ES6 解构
[…arr, …array]
不改原数组值,生成新的数组。

2.遍历添加
array.forEach(item => {
arr.push(item)
})
遍历方法:forEach、map、filter、every、for、for in、for of等。

添加方法:push(后追加)、unshift(前追加)等。

arr值改变成追加后的样子,array值不改变

3.concat
arr.concat(array)
不改原数组值,生成新的数组。

4.join & split
(arr.join(‘,’) + ‘,’ + array.join(‘,’)).split(‘,’)
原数组值不改变。

默认会把数组中的数字类型转成字符串类型。

数组的项是引用类型时会自动生成’[object Object]',造成数据丢失或错误。

5.解构添加
arr.push(…array)
arr.unshift(…array)
arr变成合并后的样子,array值不变。

6.splice解构
arr.splice(arr.length, ‘’, …array)
原数组值不变,返回空数组。

7.apply
arr.push.apply(arr, array)
arr.unshift.apply(arr, array)
原数组值不改变,返回拼接后数组的长度。

8.call
arr.push.call(arr, …array)
arr.unshift.call(arr, …array)
原数组值不改变,返回拼接后数组的长度。