首页 > 代码库 > js的数组(二)
js的数组(二)
今天来做第二题,rt:
计算数组的集合,已知数组都是number类型。求和
很简单的一道题目,一般都是遍历之后每一个i += 然后return出去,没啥好说的,先介绍几个js方法,就不会这么认为了。
1.Array.prototype.reduce():
2.forEach,之前有写过,不清楚的可以看第一篇
3.map,同上
4.常用的for循环
5.eval 这是一个黑科技,感觉有背js设计,但是很简单,也能满足需求
1.Array.prototype.reduce():看看兼容如何,ie9以上,其他全兼容(chrom,firefox),mdn上原话是:The reduce()
method applies a function against an accumulator and each element in the array (from left to right) to reduce it to a single value.翻译了一下reduce()
方法对累加器和数组中的每个元素 (从左到右)应用一个函数,将其减少为单个值。
我也看不懂,看看语法:
array.reduce(function(accumulator,currentValue
, currentIndex, array), initialValue)
个人认为,就是reduce接受一个函数,里面有4个参数让你填,1.初始值,或者上一次回调的返回值;2.数组正在处理的的元素,也就是循环中每次遍历的i;3.元素索引相当于循环汇总的i;
4.就是数组,需要处理的数组;5.initialValue,就是设置初始值,如果不填,那么数组中的第一个就是初始值,空数组直接报错!!
思路:reduce接受4个参数,那么我们只要前两个参数就可以完成,上一次回调的返回值,个人理解,当数组[1,2,3,4]第一次一个参数是1,那么第二次就是进行运算之后的值,第三次就是第二次的值+第4个值,以此类推
索引值不需要pass,数组可选可不选,说的不是很清楚,这张图应该看明白了。
最后返回结果是10,https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce 原文地址;
上代码解题:
var arr = [1,2,3,4,5]; if(Array.prototype.reduce()){ arr.reduce(function(a,b){ return a+ b },0) }
返回:15
如果这个初始0设置成10,那么就是10 +15 =25 返回25;
2.forEach解题:
var arr = [1,2,3,4,5]; var num = 0; arr.forEach(function(val, index, arr){ num += val }) return num //返回15
3.map解题:
var arr = [1,2,3,4,5]; var num = 0; arr.map(function(a){ num +=a }) return num ; //返回15
4.一般循环
var arr = [1,2,3,4,5]; var num = 0; for(var i = 0;i<arr.length;i++){ num += arr[i] } return num; //返回 15
5.eval
避免在不必要的情况下使用eval,重要!
eval很特别,他可以把数字类的字符串进行运算。属于String类吧,但是他可以+-*%,number类吧,他只接受string!
上代码:
var arr = [1,2,3,4,5]; var num = eval(arr.join(‘+‘)); console.log(num) console.log(typeof num) //返回 15 //返回 number -。-
总结:虽然eval很简单,但是还是不要用好一点,也就是面试的时候嘚瑟嘚瑟,没啥用,解决实际的map最佳。
写这篇文章的时候也是学习,reduce的api,复习forEach的api,这些比较简单的题目,可以多练习,打好基础比什么都重要,这是对自己说的。
js的数组(二)