今天在看“廖雪峰官方网站”的js教程时,看到了map和reduce。其中有一个练习题是:不使用js内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数(先将字符串转换为数组,再将数组转换为从arr[0]到arr[arr.(length-1)]的一个数字。比如:把[1, 3, 5, 7, 9]变换成整数13579。

我的解法:

 function toNum(str)
{
var arr=[];
for(var i=0;i<str.length;i++)
{
arr.push(str[i]);
}
var num=arr.reduce(function(x,y)
{
return x * 10 + y;
})
alert(num);
}
toNum('123');

但是上述结果弹出的却是“10203”。经过测验,原因有以下几点:

1,对于for循环得到的arr数组,得到的是['1','2','3'],而非[1,2,3]。即数组中的每个元素是字符串而非数字。

function toNum(str)
{
var arr=[];
for(var i=0;i<str.length;i++)
{
arr.push(str[i]);
}
return arr;
}
toNum('123');
//返回["1", "2", "3"]

2,字符串和数字相减乘除得到的是数字,字符串和数字相加得到的仍是字符串。

"1"*10+2;
//返回12
"1"*10+"2";
//返回"102"

更正方案一:将for循环得到的第一个数组中的字符串和0相减,得到一个都是数字的数组,再对该数组施加reduce函数。

 function toNum(str)
{
var arr=[];
for(var i=0;i<str.length;i++)
{
arr.push(str[i]);
}
var arrn=arr.map(function(x){return x-0})
var num=arrn.reduce(function(x,y)
{
return x * 10 + y;
})
alert(num);
}
toNum('123');

 再次简化,利用字符串的split方法:

function toNum(str)
{
var arr=str.split('');//split方法返回的数组中每个元素仍是字符串
var arrn=arr.map(function(x){return x-0})
var num=arrn.reduce(function(x,y)
{
return x * 10 + y;
})
alert(num);
}
toNum('123');

练习题二:“把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。” 

我的解法:

function norm(arr)
{
var arrn=[];
for (var i=0;i<arr.length;i++)
{
arrn.push(
arr[i][0].toUpperCase()+
arr[i].substring(1).toLowerCase());
}
alert(arrn);
}
norm(['A dam', 'Lisa', 'Bart']);

  

  

补充:关于substring()与slice().

substring():substring() 方法用于提取字符串中介于两个指定下标之间的字符。

语法:stringObject.substring(start,stop)。substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。

slice():slice() 方法可从已有的数组中返回选定的元素。  

语法:arrayObject.slice(start,end)。返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

 

javascript中的map和reduce的更多相关文章

  1. java8中的map和reduce

    java8中的map和reduce 标签: java8函数式mapreduce 2014-06-19 19:14 10330人阅读 评论(4) 收藏 举报  分类: java(47)  FP(2)  ...

  2. 由实现JavaScript中的Map想到的

    项目中要用到JavaScript中的Map数据类型,它不像JDK那样有自带的,怎么办?搜了找到一个不错的(http://darkmasky.iteye.com/blog/454749).用这个可以满足 ...

  3. Python 中的map和reduce学习笔记

    map和reduce都是Python中的内置函数 map函数接受两个参数,第一个参数是函数,第二个参数是列表,将函数依次作用于列表中的元素,并返回一个元素 reduce同样以函数和列表作为参数,区别在 ...

  4. ES6新特性:Javascript中的Map和WeakMap对象

    Map对象 Map对象是一种有对应 键/值 对的对象, JS的Object也是 键/值 对的对象 : ES6中Map相对于Object对象有几个区别: 1:Object对象有原型, 也就是说他有默认的 ...

  5. JavaScript中的Map

    1.首先,在新版本的浏览器中,已经实现了对Map的原生支持:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glob ...

  6. python中的map、reduce、filter、sorted函数

    map.reduce.filter.sorted函数,这些函数都支持函数作为参数. map函数 map() 函数语法:map(function, iterable, ...) function -- ...

  7. Hadoop 中关于 map,reduce 数量设置

    map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务 ...

  8. JavaScript 中的 Map

    很多编程语言中都有类似Map这种 键-值对 的数据结构. 可惜,JavaScript没有. 幸运的是,可以自己构建一个Map对象. 对象的定义 <script type="text/j ...

  9. Javascript 中的map/reduce

    先填个坑,后面慢慢填 附上一篇不错的文章:https://segmentfault.com/a/1190000008719824

随机推荐

  1. C# partial 关健字说明

    参考:http://blog.csdn.net/niemeiquan/article/details/7801803 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个 ...

  2. DNS子域授权

    DNS子域授权 当一个域很大时,而且还有上,下层关系,如果所有的记录变更都由某一台服务器来管理的话,那将会是什么样子?就好比一个公司的总经理直接管理公司1000个人的所有事项,恐怕会被累死.所以会在总 ...

  3. Azure CosmosDB (8) 性能指标Request Unit-RU

    <Windows Azure Platform 系列文章目录> 本次将介绍Cosmos DB的性能指标RU (Request Unit). 总的来说,我们设置的Azure CosmosDB ...

  4. django 的后台管理

    class bcb(models.Model): name = models.CharField(max_length=64,verbose_name='班次名称') verbose_name = ' ...

  5. 7.STM32中GPIO理解

    端口概述 在STM32中,每个I/O端口可以由软件配置成为输入/输出模式.复位期间或刚复位后,I/O端口被配置成浮空输入模式.所有的GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时, 它们可以被激 ...

  6. Elasticsearch-6.7.0系列(五)5044端口 logstash安装

    centos7环境 下载logstash wget https://artifacts.elastic.co/downloads/logstash/logstash-6.7.0.tar.gz      ...

  7. Java程序的第一次作业

  8. scrapy实战之scrapyrt的使用

    scrapyrt为scrapy提供了一个http接口,有了它,我们不用再执行命令,而是直接请求一个http接口来启动项目,如果项目是部署在远程的,会比较方便. 1.安装: pip install sc ...

  9. 用yum快速搭建LAMP平台

    实验环境: [root@nmserver-7 html]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@nms ...

  10. RocketMQ消费批拉超过32不生效

    由于一些原因,我需要RocketMQ消费的时候,一批拉400条,一批处理400条.设置如下: 为了简单验证是否正确,消费如下: 直接通过打印msgs.size()观察情况即可. 现象 实验的topic ...