博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组求和方法汇总
阅读量:4967 次
发布时间:2019-06-12

本文共 3064 字,大约阅读时间需要 10 分钟。

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

四、看到其他同学 @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: 03 };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

你可能感兴趣的文章
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
appium(13)- server config
查看>>
IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR...
查看>>
管理信息系统 第三部分 作业
查看>>
[Leetcode Week13]Search a 2D Matrix
查看>>
查看端口占用cmd命令
查看>>
2019.01.17王苛震作业
查看>>
清除浮动
查看>>
PayPal(贝宝)支付接口、文档、IPN
查看>>
ORACLE 10G R2_执行计划中cost cardinality bytes cpu_cost io_cost解释
查看>>
本地存储
查看>>
MP3的播放与停止
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
Android项目的目录结构
查看>>