本日瞥见一道面试题:["1","2","3"].map(parseInt)
答案是多少?
答案是[1,NaN,NaN]
对map()要领不太相识就去搜了一下:Array.prototype.map(),内里也包含了对这道面试题的详解。
map()要领返回一个由原数组中的每一个元素挪用一个指定要领后返回值构成的新数组。
语法
array.map(callback[,thisArg])
详细参数上面的链接中能瞥见,也就不反复了。
形貌
map 要领会给远数组中的每一个元素都按顺序挪用一次 callbak 函数。 callback 每次实行后的返回值(包含 undefined )组合起来构成一个新数组。 callback 函数只会在有值的索引上被挪用,那些历来没被赋过值或许运用 delete 删除的索引则不会被挪用。
callback 函数会被自动传入三个参数:数组元素,元素索引,原数组自身。
假如 thisArg 参数有值,则每次 callback 函数被挪用的时候, this 都邑指向 thisArg 参数上的这个对象。若省略了 thisArg 参数,或许赋值为 null 或 defined,则 this 指向全局对象。
map 不修改挪用它的原数组自身(固然能够在 callback 实行时转变原数组)。
运用 map 要领处置惩罚数组时,数组元素的范围在 callback 要领第一次挪用之前就已肯定了。在 map 要领实行的过程当中:原数组中增添的元素将不会被 callback 访问到;若已存在的元素被转变或许删除,则它们的通报到 callback 的值是map 要领遍历到它们的那一时候的值;而被删除的元素将不会访问到。
面试题
这个时候就很好明白为何末了的返回值是[1,NaN,NaN]
了,由于运用parseInt
时,是能够通报两个参数的,第一个参数是被剖析的值,第二个参数是进制数。map
要领在挪用callback函数时,会给它通报三个参数:当前正在遍历的元素,元素索引,原数组自身,第三个参数parseInt
会无视,但第二个参数,会把通报过来的索引值当作进制数来运用。所以结果是如许
假如想要获得准确的值,能够如许:
function returnInt(element){
return parseInt(element,10);
}
["1", "2", "3"].map(returnInt);
// 返回[1,2,3]
觉得这个函数和
Array.prototype.forEach()
有点像。。概况Array.prototype.forEach()