版权声明:随意转载,转载请注明出处。 https://blog.csdn.net/qq_36258516/article/details/85737895
JavaScript学习笔记
问题描述(来自廖雪峰官网):
想办法把一个字符串13579
先变成Array
——[1, 3, 5, 7, 9]
,再利用reduce()
就可以写出一个把字符串转换为Number的函数。不要使用JavaScript内置的parseInt()
函数,利用map和reduce操作实现一个string2int()
函数:
'use strict';
function string2int(s) {
/*需要填充的部分*/
}
// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
if (string2int.toString().indexOf('parseInt') !== -1) {
console.log('请勿使用parseInt()!');
} else if (string2int.toString().indexOf('Number') !== -1) {
console.log('请勿使用Number()!');
} else {
console.log('测试通过!');
}
}
else {
console.log('测试失败!');
}
思路:
我们需要明确这个函数传递进来的参数以及返回值是什么,即传递过来的参数是一个需要转换的字符串,返回值是字符串转换成的整数。
这里就很容易想到一个思路。我们需要把s字符串拆开,变成字符数组,再将字符数组转换成整型数组,最后再通过整形数组求出最终返回值。明确了思路我们就可以开始写代码了。
首先是拆分,JavaScript里面有个split()函数,可以直接拆分。于是可以写出以下代码。
var arr=s.split('');/*将s字符串拆开,存入arr数组中*/
其次是将其变成整型数组。
arr=arr.map(function (x) {
return x-'0';
})
//题目要求使用map,这里正好使用map方法,使用map可以省去循环,作用于数组里每个元素。
接着就是转换成返回值。
arr=arr.reduce(function (x,y) {
return x*10+y;
})
//reduce()把结果继续和序列的下一个元素做累积计算,同样这里省去了循环。
最后别忘了返回值。
return arr;
最终代码:
function string2int(s) {
var arr=s.split('');
arr=arr.map(function (x) {
return x-'0';
})
arr=arr.reduce(function (x,y) {
return x*10+y;
})
return arr;
}
// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
if (string2int.toString().indexOf('parseInt') !== -1) {
console.log('请勿使用parseInt()!');
} else if (string2int.toString().indexOf('Number') !== -1) {
console.log('请勿使用Number()!');
} else {
console.log('测试通过!');
}
}
else {
console.log('测试失败!');
}
附个简单版:
function string2int(s) {
if(s.length===1) return s-'0';/*若长度是1就直接返回,reduce()至少要两个参数*/
var arr=s.split('').reduce(function (x,y) {
return (x-'0')*10+(y-'0');
})
return arr;
}
// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
if (string2int.toString().indexOf('parseInt') !== -1) {
console.log('请勿使用parseInt()!');
} else if (string2int.toString().indexOf('Number') !== -1) {
console.log('请勿使用Number()!');
} else {
console.log('测试通过!');
}
}
else {
console.log('测试失败!');
}