【开发路上的坑合集】
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)
原数组值不改变,返回拼接后数组的长度。