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

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


相关推荐

  • webapi文档描述-swagger

    webapi文档描述-swagger最近做的项目使用mvc+webapi,采取前后端分离的方式,后台提供API接口给前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用word文档方式进行交流

    2022年8月5日
    7
  • 最好的频谱分析仪基础知识「建议收藏」

    最好的频谱分析仪基础知识「建议收藏」转载自网优雇佣军文章目录最好的频谱分析仪基础知识前言有两种技术方法可完成信号频域测量(统称为频谱分析)。快速傅立叶变换频谱分析仪扫频式频谱分析仪工作原理输入衰减器混频器中频滤波器对数放大器检波器视频滤波器扫描本振频谱分析仪关键性能指标频率分辨率相位噪声灵敏度总结一下提高频谱仪测试灵敏度的技术方法:最好的频谱分析仪基础知识前言频谱分析是观察和测量信号幅度和信号失真的一种快速方法,其显示结果可…

    2022年8月11日
    5
  • Linux中安装tree命令

    Linux中安装tree命令在CentOS系统的普通用户下,使用sudoyum-yinstalltree下载tree命令,在ubuntu系统的普通用户下,使用sudoapt-getinstalltree下载tree命令

    2022年7月24日
    10
  • Java设计文本编辑器

    Java设计文本编辑器阿乐今天敲代码没 Java 设计文本编辑器前言一 实现功能二 扼要代码 1 界面程序设计 2 文件菜单设计 3 编辑菜单栏设计 4 格式菜单栏设计运行截图前言利用 Java 设计一个文本编辑器 提示 以下是本篇文章正文内容 下面案例可供参考一 实现功能该简易记事本主要可实现以下几个功能 1 菜单中有 文件 编辑 格式 三个主菜单 2 文件 有 打开 保存 退出 三个子菜单 分别用于打开文件 保存文件 退出记事本 3 编辑 中有 剪切 复制 粘贴 三个子菜单 用于剪

    2025年6月27日
    3
  • idea2021.2.3激活码永久破解方法

    idea2021.2.3激活码永久破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    311
  • 《Linux Device Drivers》第十章 中断处理——note

    《Linux Device Drivers》第十章 中断处理——note

    2022年2月2日
    35

发表回复

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

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