Discuss / JavaScript / 打卡交作业

打卡交作业

Topic source

1.利用reduce()求积:

function product(arr) {
    returnarr.reduce(function(x,y){ return x*y})
}

2.练习:不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:

function string2int(s) {
    var arr=[];
    for (let i of s){arr.push(i*1);}; 
    return arr.reduce(function (x,y) {return x*10+y;});
}

3.请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam','LISA', 'barT'],输出:['Adam','Lisa', 'Bart']。

function normalize(arr) {
return arr.map(function get_norm(x) {return x.slice(0,1).toUpperCase()+x.slice(1).toLowerCase();});
}

4. 小明希望利用map()把字符串变成整数

var arr = ['1', '2', '3'];
var r;
r = arr.map((x)=>parseInt(x));
console.log(r);

小明做法不成功的原因:每次送入parseInt()的有3个元素:element, index和array本身。parseInt本身是有2个参数的:string和radix,所以element和index纳入了函数运算,array被抛弃了。parseInt(‘1’,0)表示1的数字值所以输出是1。parseInt(‘2’,1)返回NaN因为radix是2到32之间的整数不能是1。parseInt(‘3’,2)也是NaN因为2进制下没有3这样的表达。我们的修改是通过明确定义只有一个元素用于函数计算(element)。

🌙

#2 Created at ... [Delete] [Delete and Lock User]

4 不知所云

🌙

#3 Created at ... [Delete] [Delete and Lock User]

parseInt 的第二个参数 radix 表示进制

#4 Created at ... [Delete] [Delete and Lock User]

4的详细解说:

参考:

parseInt   和  Array.prototype.map()

传入

map()方法会调用callbackFn方法,给map里的函数传入三个参数:

currentValue数组中正在处理的当前元素。

index数组中正在处理的当前元素的索引。

array: map方法调用的数组。

接收

parseInt方法接收两个参数(所以map传入的第三个参数被省略):parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数。

返回值为NaN的情况:

1. radix 小于 2 或大于 36,或

2. 第一个非空格字符不能转换为数字

最终调用的是:parseInt(‘1’,0)为什么radix是0 ,不属于2-36还可以获得呢,是因为

如果 radixundefined0 或未指定的,JavaScript 会假定以下情况:

  1. 如果输入的 string0x0X(一个 0,后面是小写或大写的 X)开头,那么 radix 被假定为 16,字符串的其余部分被当做十六进制数去解析。
  2. 如果输入的 string 以 "0"(0)开头,radix 被假定为 8(八进制)或 10(十进制)。具体选择哪一个 radix 取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix
  3. 如果输入的 string 以任何其他值开头,radix10 (十进制)。

parseInt(‘2’,1)返回NaN是因为范围不满足;

parseInt(‘3’,2)返回NaN是因为radix指定了2进制,但是3不是二进制数的正确表达。


  • 1

Reply