相同:
forEach和map方法里每次执行匿名函数都支持3个参数,参数分别是item-当前项,index当前项索引值,array原数组;
不同:
1、map()方法返回一个新数组:方法里必须return item项
2、map()方法不会对空数组进行检测,若arr为空数组,则map方法返回的也是一个空数组,map方法不会改变原始数组。
3、map()方法不会改变原始数组:原始数组的数据类型为基本类型的话,保持不变;数据类型如果为引用类型的话,引用地址不变,
但是具体的内容是可以改变的。如果需要遍历一个数组,只是想修改这个数组的某些属性,直接赋值就好,不用return 后重新赋值新数组
var arr3 = [{a:1, b:2}, {a:3, b:4,c: 5}];
var arr4 = arr3.map((item) => {
item.a = item.a +'sdf';return item;
});
console.log(arr3);
console.log(arr4);
//arr3:
[{a: "1sdf", b: 2},{a: "3sdf", b: 4, c: 5}]
//arr4:
[{a: "1sdf", b: 2},{a: "3sdf", b: 4, c: 5}]
var arr3 = [1, 2, 3, 4, 5];
var arr4 = arr3.map((item) => {
item =item +'fghj';return item;
});
console.log(arr3);
console.log(arr4);
//arr3:
[1, 2, 3, 4, 5]
//arr4:
["1fghj", "2fghj", "3fghj", "4fghj", "5fghj"]
1.forEach方法用来调用数组的每个元素,将元素传给回调函数
2.forEach对于空数组是不会调用回调函数的,即没有返回值。
3、forEach在对item进行修改的时候,如果item是基本类型,item 对应的 的内存地址实际并没有变化,如果 item 是 引用类型的值,item 对应多的内存地址也没有变化,但是对应的值,已经重写了
4、如果要使用数组的forEach()方法对其改值时,需要直接通过arr[i]这种方式来更改。(map中用arr[i]也可以改变原数组,只是map中会有返回值需要接收
var arr = [1, 2, 3, 4, 5];
arr.forEach((item) => {
item = item * 2;
});
console.log(arr);
// [1, 2, 3, 4, 5]
var arr = [1, 2, 3, 4, 5];
arr.forEach((item,index,arr) => {
arr[index] = item * 2;
});
console.log(arr);
// [2, 4, 6, 8, 10]
var arr = [{a:1, b:2}, {a:3, b:4,c: 5}];
arr.forEach((item) => {
item.a = item.a +'sdf';
});
console.log(arr);
//arr:
[{a: "1sdf", b: 2},{a: "3sdf", b: 4, c: 5}]
一般简单遍历用forEach,对会产生有规律的变化的新数组时用map
另外:
1.
数组中改变原数组的方法:pop()、push()、reverse()、shift()、sort()、splice()、unshift()
2.
数组中不改变原数组的方法:concat()、join()、slice()、toString()