数组中arr.map()与arr.foreach()的区别


 

相同

        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()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值