结论:
arr.forEach()无法对数组元素item直接进行赋值,但若item为对象,可以对item的属性进行更改
arr.map()会直接创建一个新的数组,但可以在某种程度上实现arr元素item的更改。
arr.forEach()
let a = [1, 2, 3, 4, 5, 6, {
name: 'ming',
sex: 'male'
}]
let b = a.forEach((p) => {
if (p.name) {
p.name = 'hong'
p.sex = 'female'
} else {
p = 2
}
})
console.log(a);
变量p为数组a内的元素,且,遍历整个数组a
如果直接对p进行更改,并无效果,p仍为原纸
但,若p为对象,对p内属性进行修改,是有效的
输出结果:
(7) [1, 2, 3, 4, 5, 6, {…}]
0: 1
1: 2
2: 3
3: 4
4: 5
5: 6
6: {name: 'hong', sex: 'female'}
arr.map()
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
即,map创建了一个新数组,且,需要用一个变量接收
let a = [1, 2, 3, 4, 5, 6, {
name: 'ming',
sex: 'male'
}]
let b=a.map((item) => {
return {
a: 1,
b: 1
}
})
console.log(a);
console.log(b);
map()内参数为一个函数,item为遍历数组arr的元素,对arr内的每一个元素进行操作,return的{a:1,b:2}即为新数组内元素的值
输出为:
(7) [1, 2, 3, 4, 5, 6, {…}]
0: 1
1: 2
2: 3
3: 4
4: 5
5: 6
6: {name: 'ming', sex: 'male'}
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {a: 1, b: 1}
1: {a: 1, b: 1}
2: {a: 1, b: 1}
3: {a: 1, b: 1}
4: {a: 1, b: 1}
5: {a: 1, b: 1}
6: {a: 1, b: 1}
由此可见,arr.map()并不会更改数组arr,他会返回一个新的数组