javascript中的map和reduce

今天在看“廖雪峰官方网站”的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 中的元素。

 

时间: 2024-10-25 23:55:56

javascript中的map和reduce的相关文章

javascript中使用Map

mis.comm.js.Map = function() { this.elements = new Array(); //获取MAP元素个数 this.size = function() { return this.elements.length; } //推断MAP是否为空 this.isEmpty = function() { return (this.elements.length < 1); } //删除MAP全部元素 this.clear = function() { this.el

由实现JavaScript中的Map想到的

项目中要用到JavaScript中的Map数据类型,它不像JDK那样有自带的,怎么办?搜了找到一个不错的(http://darkmasky.iteye.com/blog/454749).用这个可以满足项目中要求.在找的过程中,发现这么个轻量级的实现.http://www.iteye.com/topic/196610帖子中,二楼myy的回复内容.应该说这个简单地实现可以满足我的一些需求,但它少了size方法. 在这个简单实现的基础上,自己能不能加一个size方法呢?而不地通过封装Array那样的重

python中的map和reduce学习

参考自:https://github.com/qiwsir/StarterLearningPython/blob/master/204.md#map https://github.com/qiwsir/StarterLearningPython/blob/master/204.md#reduce map(函数名/函数表达式(lambda等)/....  ,参数1,参数2) reduce(函数名/函数表达式(lambda等)/....  ,参数1) 区别: 1.参数:reduce除了函数外只允许一

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

Map对象 Map对象是一种有对应 键/值 对的对象, JS的Object也是 键/值 对的对象 : ES6中Map相对于Object对象有几个区别: 1:Object对象有原型, 也就是说他有默认的key值在对象上面, 除非我们使用Object.create(null)创建一个没有原型的对象: 2:在Object对象中, 只能把String和Symbol作为key值, 但是在Map中,key值可以是任何基本类型(String, Number, Boolean, undefined, NaN..

Yarn中的Map和Reduce的优化

通过Hive执行的批次任务处理失败,Spark中报的错误日志如下: [plain] view plain copyERROR : Failed to monitor Job[ 3] with exception 'java.lang.IllegalStateException(RPC channel is closed.)' java.lang.IllegalStateException: RPC channel is closed. at com.google.common.base.Prec

Python中的 Map 和 Reduce

03 Map map()传入的第一个参数是f,map将f依次作用到序列的每个元素,并把结果作为新的Iterator返回. def f(x): return x * x 如果不用map,需要这么写: L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) 用map一行代码搞定: list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])) 另外一个map例子: list(map(str, [1, 2, 3, 4,

Hadoop 中关于 map,reduce 数量设置

map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务就没有并行执行,但是map和reduce的数量也不能过多,数量过多虽然可以提高任务并行度,但是太多的map和reduce也会导致整个hadoop框架因为过度的系统资源开销而使任务失败.所以用户在提交map/reduce作业时应该在一个合理的范围内,这样既可以增强系统负载匀衡,也可以降低任务失败的开销

JavaScript中的Map和Set

JavaScript的默认对象表示方法{}可以视为其他语言中的Map或者Dictionary的数据结构,即一组键值对. 但是JavaScript的对象有个小问题,就是键必须是字符串,但实际上Number或者其他数据类型作为键也是非常合理的. Map是一组键值对的结构,具有极快的查找速度. var m = new Map([['Michael',95],['Bob',75],['Tracy',85]]); m.get('Michael');//95 初始化Map需要一个二维数组,或者直接初始化一个

JavaScript中的map方法

假设有一个函数f(x)=x2;作用在一个数组[1,2,3,4,5,6,7,8,9],通常我们会用遍历的方法来实现. function f(x){ return x * x; } var arr = [1,2,3,4,5,6,7,8,9]; var result = []; for(var i=0; i<arr.length; i++){ result.push(f(arr[i])) } 这样的确可以实现,但我们有更优雅的实现. function f(x) { return x * x; } va