为了账号安全,请及时绑定邮箱和手机立即绑定

萌新求教!关于js的map奇怪问题

萌新求教!关于js的map奇怪问题

慕少森 2019-08-17 10:02:04
代码1letarr=[{"a":1},{"b":2}];arr.map((item,index)=>{item.key=index;});console.log(arr);//[{a:1,key:0},{b:2,key:1}]代码2letarr1=[{"a":1},{"b":2}].map((item,index)=>{item.key=index;});console.log(arr1);//[undefined,undefined]请问下为啥两个结果会不一样?
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

问题很明显letarr1=[{"a":1},{"b":2}].map((item,index)=>{item.key=index;})这个代码返回的就是[undefined,undefined]这个没错为什么?[{"a":1},{"b":2}].map((item,index)=>{item.key=index;})和arr.map((item,index)=>{item.key=index;})明显不是一个东西。首先要理解什么是Array.prototype.map()这个叫映射,映射既是:对每一个元素作用相同的操作,并返回指定得结果。你前面的操作是对arr的每一个元素添加一个key,让key=index,并且没有返回你后面的操作是对[{"a":1},{"b":2}]的每一个元素添加一个key,让key=index,并且没有返回其实你这2个操作返回的都是[undefined,undefined]如果你要让你的第二个代码得到正确的结果,改成这样
letarr1=[{"a":1},{"b":2}].map((item,index)=>{
item.key=index;
returnitem;
});
console.log(arr1);
结果就如你所料了。
                            
查看完整回答
反对 回复 2019-08-17
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

map返回一个新数组,你应该打印这个
arr.map((item,index)=>{item.key=index;});
的值,而不是arr你map回调里没写return就是undefined
                            
查看完整回答
反对 回复 2019-08-17
  • 2 回答
  • 0 关注
  • 543 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号