数组求和方法汇总

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 })();

四、看到其他同学 @[email protected]小胖不瘦 的代码发现原来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);
时间: 2024-08-02 06:59:13

数组求和方法汇总的相关文章

PHP二维数组转换成一维数组,一个变量多个二维数组转换成一维数组,PHP二维数组(或任意维数组)转换成一维数组的方法汇总,array_reduce(); array_walk_recursive(); array_map();

方法汇总: 1. array_reduce函数法 //用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value) { return array_merge($result, array_values($value)); }, array()) 2. array_walk_recursive函数法 //用array_walk_recursive()函数就非常灵活,可以把任意维度的数组转换成一

PHP 遍历数组的方法汇总

1. foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. #example1: <?php $colors= array('red','blue','green','yellow'); foreach ($colorsas$color){ echo "Do you like $color? <br />"; } ?> 显示结果: Do you like red? Do you like blue? Do you like gree

JavaScript数组去重方法汇总

1.运用数组的特性 1.遍历数组,也遍历辅助数组,找出两个数组中是否有相同的项,若有则break,没有的话就push进去. //第一版本数组去重 function unique(arr){ var res = [], len = arr.length; for(let i = 0;i < len; i++){ var reslen = res.length; for(let j = 0;j < reslen; j++){ //遍历辅助数组 if(arr[i] === res[j]){ brea

PHP二维数组(或任意维数组)转换成一维数组的方法汇总

目录 1 array_reduce函数法 2 array_walk_recursive函数法 3 array_map函数法 假设有下面一个二维数组: $user = array( '0' => array('id' => 100, 'username' => 'a1'), '1' => array('id' => 101, 'username' => 'a2'), '2' => array('id' => 102, 'username' => 'a3'

前端数组的方法汇总,

自我觉得 字符串 数组 cookie localstorage 等等 都是博客必不可少的,我理解的 博客是 自己亲手写的 一个例子一个列子敲过来的,有好的东西要借鉴和分享的,数组的处理这不用说也是必不可少的,以后有好的例子还会增加的. /*        数组基本功    */    //(1): 创建数组    var arr1 = new Array(20);    console.log(arr1);    var arr2 = [20];    console.log(arr2);  

数组求和的多种方法,并比较性能

可以借用下面12种方法对数组求和,创建一个长度为10w的数组,进行测试 every()?????  检测数值元素的每个元素是否都符合条件. filter()??????检测数值元素,并返回符合条件所有元素的数组. map()?? ?? ? 通过指定函数处理数组的每个元素,并返回处理后的数组. some()?????  用于检测数组中的元素是否满足指定条件(函数提供). reduce()????   数组中的每个值(从左到右)开始合并,最终为一个值 reduceRight()??  数组中的每个值

JavaScript Array 数组方法汇总

JavaScript Array 数组方法汇总 1. arr.push() 从后面添加元素,返回值为添加完后的数组的长度 var arr = [1,2,3,4,5] console.log(arr.push(5)) // 6 console.log(arr) // [1,2,3,4,5,5] 2.arr.unshift() 从前面添加元素, var arr = [1,2,3,4,5] console.log(arr.unshift(2)) // 6 console.log(arr) //[2,1

随机数组求和

题目要求: 随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路:     创建一个长度为10的double型数组,调用Java.util.Random包定义Random对象,利用方法nextInt(100);在通过for循环.Random类进行随机数赋值得到1-100间的随机数.在将数组里的数相加.最后在用JOptionPane.showMesssageDialog进行消息框输出. 程序流程图: 源程序代码: package qaq

reduce实现数组求和

对于实现数组求和,我们常用的思路是通过for.while,对数组进行迭代,依次将他们的值加起来,下面列举常用的两种方法 第一种: var arr = [1,2,3,4,5,6]; Array.prototype.sum = function (){ var sumResult = 0; for (var i = 0; i < this.length; i++) { sumResult += parseInt(this[i]); } return sumResult; } arr.sum(); 第