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

数组求和方法汇总_用函数的方法对输入的数组求和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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • codereview介绍[通俗易懂]

    codereview介绍[通俗易懂]1.定义:Codereviewissystematicexamination(oftenknownaspeerreview)ofcomputersourcecode.Itis

    2022年8月5日
    8
  • VMware下安装centos7.8及相关配置

    VMware下安装centos7.8及相关配置第一步:下载centos7.8下载地址:http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/版本选择(此处我选择DVD版):CentOS-7-x86_64-DVD-1810.iso标准安装版,一般下载这个就可以了(推荐)CentOS-7-x86_64-NetInstall-1810.iso网络安装镜像CentOS-7-x86_64-Everything-1810.iso对完整版安装盘的软件进行补充,集成所有软件CentO.

    2022年5月30日
    29
  • java静态代理实现_静态注册和动态注册的优缺点

    java静态代理实现_静态注册和动态注册的优缺点思考:以常见的增删改查为例,在执行增删改的时候我们需要开启事务,执行完成后需要提交事务假如说你Service里有100个增删改的方法,那这100个方法里除了你自己真正需要处理的业务逻辑外,每个方法都还需要去关注开启事务,提交事务这些动作。那有没有稍微好点的办法解决呢?于是就出现了代理模式的概念,那什么是代理模式呢?1、什么是代理模式简单来说:代理就是对目标方法进行增强。什么意思呢?…

    2022年10月17日
    0
  • 17款漂亮的 HTML5 网站模板免费下载「建议收藏」

    17款漂亮的 HTML5 网站模板免费下载「建议收藏」在过去的几年,设计师们已开始关注和使用HTML5了,如今HTML5得到了更加广泛的应用。今天,本文与大家分享17款免费的HTML5网站模板,看看有没自己喜欢的。

    2022年8月6日
    3
  • PHP审计之BEESCMS审计案例

    PHP审计之BEESCMS审计案例审计流程任意文件包含文件存在即包含该文件,而包含的这个文件名可控,则需要找这个文件创建的地方functioncreat_inc($fl,$str){if(

    2021年12月13日
    37
  • h5页面 请在微信客户端打开链接_模拟微信接口时,提示“请在微信客户端打开链接”(转)…[通俗易懂]

    h5页面 请在微信客户端打开链接_模拟微信接口时,提示“请在微信客户端打开链接”(转)…[通俗易懂]背景描述相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面。大概在1年前,专门安排了一个人去解决这个技术问题,遗憾的是当时没有找到解决方案,接下来所有微信端的接口测试和性能测试都无法进行,今天和大家分享下我们的解决方案,希望大家可以绕过微信的坑。业务场景我这里以JMeter来举例,我们可以通过在JMeter上开启代理,手机上设置代理来录制微信端…

    2022年6月7日
    30

发表回复

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

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