from 廖雪峰js教程
想办法把一个字符串13579
先变成Array
——[1, 3, 5, 7, 9]
,再利用reduce()
就可以写出一个把字符串转换为Number的函数。不要使用JavaScript内置的parseInt()
函数,利用map和reduce操作实现一个string2int()
函数:
// 测试: 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('测试失败!'); }
法一:比较无耻的觉得没有用number和parseint却用了-0
'use strict'
function string2int(s){
var arr=[];
for(var i of s)
arr.push(i-0);
return arr.reduce(function(x,y){
return x*10+y;
});
}
法二:应该就是作者期待的答案了吧,map+reduce
'use strict'
function string2int(s){
var arr=s.split("");
function toInt(zm){
return +zm;
}
var res=arr.map(toInt);//注意不能直接arr.map,他像slice不像splice会改变原数组
return res.reduce(function(x,y){
return x*10+y;
});
}
后来看了下有人写的是var arr=[...s];这个和s.split("")那个在控制台的结果是一样的,神奇的...,活久见.mdn也没查到,希望有大神指点