数组求和方法汇总_用函数的方法对输入的数组求和

数组求和方法汇总_用函数的方法对输入的数组求和vararr=[1,2,3,4,5,6];测试时我不想过度使用全局变量影响命名空间,所以没使用未声明变量。而是直接通过私有作用域设置静态私有变量,也可以用其他设计模式来限定变量作用域。因为数组对象的迭代方法也是一种遍历,所以也可以借助用来实现求和。一、利用数组对象的各迭代方法:1.array.every()查询是否有所有项都匹配的方法:1(function(){…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

var arr = [1, 2, 3, 4, 5, 6];
测试时我不想过度使用全局变量影响命名空间,所以没使用未声明变量。而是直接通过私有作用域设置静态私有变量,也可以用其他设计模式来限定变量作用域。因为数组对象的迭代方法也是一种遍历,所以也可以借助用来实现求和。
一、利用数组对象的各迭代方法:
1.array.every()查询是否有所有项都匹配的方法:

 1 (function() {
 2     var sum = 0;
 3 
 4     function getSum(item, index, array) {
 5         sum += item;
 6         console.log(sum);
 7         return true;//由于every方法是会在遇到回调函数返回的第一个false时停止遍历所以需要始终返回true
 8     };
 9     arr.every(getSum);
10     console.log("use every:sum = " + sum);
11 })();

2.array.some()查询是否有匹配项的方法:

 1 (function() {
 2     var sum = 0;
 3 
 4     function getSum(item, index, array) {
 5         sum += item;
 6         console.log(sum);
 7     };
 8     arr.some(getSum);
 9     console.log("use some:sum = " + sum);
10 })();

3.array.filter()获取匹配项构成的数组的方法:

 1 (function() {
 2     var sum = 0;
 3 
 4     function getSum(item, index, array) {
 5         sum += item;
 6         console.log(sum);
 7     };
 8     arr.filter(getSum);
 9     console.log("use filter:sum = " + sum);
10 })();

4.array.map()遍历数组并返回一个修改后的副本数组的方法:

(function() {
    var sum = 0;

    function getSum(item, index, array) {
        sum += item;
        console.log(sum);
    };
    arr.map(getSum);
    console.log("use map:sum = " + sum);
})();

5.array.froEach()遍历数组的方法:

 1 (function() {
 2     var sum = 0;
 3 
 4     function getSum(item, index, array) {
 5         sum += item;
 6         console.log(sum);
 7     };
 8     arr.forEach(getSum);
 9     console.log("use forEach:sum = " + sum);
10 })();

二、利用数组对象的归并方法就简单得多,毕竟归并方法本省就是为了做这个的:

1.array.reduce()正向归并方法:

 1 arr.reduce(function(prevResult, item, index, array) { 2 return prevResult += item; 3 }); 

2.array.reduceRight()逆向归并方法:

 1 arr.reduceRight(function(prevResult, item, index, array) { 2 return prevResult += item; 3 }); 

三、常规的for循环和while循环遍历:
1.for循环

1 (function() {
2     for (var i = 0, sum = 0; i < arr.length; i++) {
3         sum += arr[i];
4         console.log(sum);
5     }
6     console.log("use for:sum = " + sum);
7 })();

2.while循环

1 (function(){
2     var i = 0, sum = 0;
3     while(i<arr.length){
4         sum+=arr[i];
5         console.log(sum);
6         i++;
7     }
8     console.log("use while:sum = " + sum);
9 })();

四、看到其他同学 @xifengxx@小胖不瘦 的代码发现原来for-in语句也可以,因为本质上数组也是个对象,每个数组项都是数组对象的属性,而数组项的下标/索引实际上就是属性的名称,所以可以通过for-in语句遍历数组实例对象的所有可枚举属性([[Enumerable]]设置为true的属性)来作为访问数组时的下标(有没有觉得很像对象的属性的方括号访问方式呢object["propName"]?)。

以下是console下的命令与返回:

>Object.keys(arr); <["0", "1", "2", "3", "4", "5"] //列出arr的可枚举属性 >Object.getOwnPropertyNames(arr); <["0", "1", "2", "3", "4", "5", "length"] //列出arr的所有属性,"length"是构造函数给arr对象添加的不可枚举属性

所以数组求和还可以这样玩:

1 (function() {
2     var sum = 0;
3     for (var index in arr) {
4         sum += arr[index];
5         console.log(sum);
6     }
7     console.log("use for-in:sum = " + sum);
8 })();

五、今天跟@Sparetire同学的交流学习到了数组的迭代方法第二个传入参数的正确使用方式,以及终于真正理解了this这个动态指针的作用(也就是在哪个执行环境使用它,它就指向这个执行环境的变量对象,如果某些方法可以将某个执行环境A的变量对象绑定到另一个执行环境B,实际上就是使得B内的代码有权方位A的变量对象内的属性和方法,也就是A环境内的变量和函数。)

以下是直接通过forEach()方法的第二个参数来改进的数组求和方式:

1 var calc = {
2     sum: 0
3 };
4 function getSum(item, index, array) {
5     this.sum += item;
6     console.log(this.sum);
7 }
8 arr.forEach(getSum,calc);
9 console.log('use forEach and change this:sum=' + calc.sum);

 

转载于:https://www.cnblogs.com/jiechen/p/5510503.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188105.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 页面可见性改变事件:visibilitychange

    页面可见性改变事件:visibilitychange1、PC浏览器上(以谷歌浏览器为例)刷新H5页面,会触发该事件,由于刷新导致该页面消失时,会检测到document.visibilityState===‘hidden’切换页面(包括切换离开和切换回来),导致页面暂时不处于激活状态时,会触发该事件。切换离开时document.visibilityState===‘hidden’,切换回该页面时,document.visibilityS…

    2022年6月18日
    38
  • 如何启用计算机双通道内存的方法,内存条怎么插 组建内存双通道正确插法教程…

    如何启用计算机双通道内存的方法,内存条怎么插 组建内存双通道正确插法教程…当我们安装或升级内存时,发现主板上有四个内存插槽,所以不知道该插入哪个内存插槽。事实上,理论上,任何一个内存插槽都可以正常使用。但是如果随意插上,未必能搭建双通道,搭建双通道也是有讲究的。那么双通道内存是什么意思呢?怎么安装?下面,安装者之家将为大家普及双通道内存的知识,并附上正确插入双通道内存的教程。希望这篇文章能对大家有所帮助。设置内存双通道插入教程一、双通道内存是什么意思?有什么好处?我们知…

    2022年6月23日
    85
  • Nginx搭建视频点播和视频直播服务器

    Nginx搭建视频点播和视频直播服务器Nginx搭建视频点播和视频直播服务器一·、环境:Centos7,(推荐,Ubuntu不是很好用,经常会有一些莫名其妙的报错)Nginx1.10.1二、系统环境搭建首先,我是不建议自己一个个去安装这些软件的,耗时耗力,而且,容易出错,所以,最好使用yuminstall***命令安装,出错的概率小。资源链接:链接:https://pan.baidu.com/s/1WmJYpQ_b…

    2022年6月14日
    30
  • 关于 onchange,onpropertychange,oninput事件

    关于 onchange,onpropertychange,oninput事件转载于:https://www.cnblogs.com/aigeileshei/p/5682303.htmlhttps://www.cnblogs.com/aigeileshei/p/5682303.htmlJS改变input的value值不触发onchange事件解决方案(转)方法(一)(转载的网络资料)需要了解的知识首先,我们需要了解onchange和onpropertycha…

    2022年7月14日
    10
  • 计算机网络的分类_计算机网络是怎样分类的

    计算机网络的分类_计算机网络是怎样分类的计算机网络的分类:按照覆盖范围分,计算机网络可以分为局域网(LAN)、城域网(MAN)、和广域网(WAN)。局域网(LAN)是一个高速数据通信系统,它在较小的区域内将若干独立的数据设备连接起来,使

    2022年8月2日
    2
  • Redis和MySQL的区别与使用(redis做mysql的缓存并且数据同步)

    Redis和MySQL的区别与使用(redis做mysql的缓存并且数据同步)一、redis和mysql介绍Redis基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,但内存价格贵。MySQL基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高。大多数的应用场景是MySQL(主)+Redis(辅),MySQL做为主存储,Redis用于缓存,加快访问速度。需要高性能的地方使用Redis,不需要高性能的地方使用M…

    2022年6月15日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号