了解Array.prototype.map()

在codewar上做一道难度最简单的题,也能得到以往没学过的知识点,这次的这道题,引出了几个知识点,其中一个是Array.from()。
题目是这样的:

意思是:给出一个非负的数字,返回一个独立的倒序数组。
我给出的解决方法是:
functiondigitize(n){
  //code herevar arr2=[];
   var arr = String(n).split("");
   for(var i = 0,l = arr.length;i<l;i++){
      arr2.push(parseInt(arr[i]));
   }
   return arr2.reverse();
}
自觉不是最好的方法,肯定有什么更好的。在得出最终答案之前,我还有个解答是:
return String(n).split("").reverse();
然而,这写法得出的结果是  [ "7" "9" "5" "8" "4" "3" ]。
水平有限啊~还是提交了答案,照常参考下大佬们给出的答案,总结了一下,发现有两种答案是用不同的方法给出正确答案的。
1.    return String (n).split( '' ).map( Number ).reverse()  或者   return String (n).split( '' ).reverse().map( Number )
2.  return Array .from( String (n),  Number ).reverse();

先来说说第二个答案:
我第一次知道Array.from()这个方法,所以特地去安利了一下,原话是这么说的:Array.from() 方法可以将一个类数组对象或可迭代对象转换成真实的数组。
关于“类数组对象或可迭代对象”,它是这么描述的:


再说说语法:

我在Array.from()的语法中发现了一个熟悉的参数名称,mapFn。什么意思呢?mapFn可以在最后生成的数组上再执行一次map方法后再返回。
也就是说  Array.from(obj, mapFn, thisArg) 就相当于  Array.from(obj).map(mapFn, thisArg), 除非创建的不是可用的中间数组。
所以到最后来绕来绕去,还是回到了map方法上了。

那么map()又是什么呢?小白我又再一次安利了一下


仔细琢磨一下就能明白了,map()就是对数组中的每个元素都执行一次他的回调函数,并且返回每一个新的值再组合起来。
重点是要注意回调函数会被自动传入3个参数,但通常情况下, map  方法中的  callback  函数只需要接受一个参数,就是正在被遍历的数组元素本身。但这并不意味着  map  只给  callback  传了一个参数。这个思维惯性可能会让我们犯一个很容易犯的错误。
例如:
// 下面的语句返回什么呢:["1","2","3"].map(parseInt);// 你可能觉的会是[1, 2, 3]// 但实际的结果是 [1, NaN, NaN]// 通常使用parseInt时,只需要传递一个参数.但实际上,parseInt可以有两个参数.第二个参数是进制数.可以通过语句"alert(parseInt.length)===2"来验证.// map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素, 元素索引, 原数组本身.// 第三个参数parseInt会忽视, 但第二个参数不会,也就是说,parseInt把传过来的索引值当成进制数来使用.从而返回了NaN./*
//应该使用如下的用户函数returnInt

function returnInt(element){
  return parseInt(element,10);
}

["1", "2", "3"].map(returnInt);
// 返回[1,2,3]
*/
弄明白这一点,你就能明白怎么用咯~反正我是弄明白了~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值