【JS趣味】数组求和的方法收集

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

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

})();

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

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

})();

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

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

})();

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

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

})();

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

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

})();

二、利用数组对象的归并方法就简单得多,毕竟归并方法本省就是为了做这个的:
1.array.reduce()正向归并方法:

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

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

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

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

(function() {
    for (var i = 0,sum = 0; i < arr.length; i++) {
        sum += arr[i];
        console.log(sum);
    }
    console.log("use for:sum = " + sum);
})();

2.while循环

(function(){
    var i = 0,sum = 0;
    while(i?)。
以下是console下的命令与返回:

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

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

(function() {
    var sum = 0;
    for (var index in arr) {
        sum += arr[index];
        console.log(sum);
    }
    console.log("use for-in:sum = " + sum);
})();

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

var calc = {
    sum: 0
};
function getSum(item,array) {
    this.sum += item;
    console.log(this.sum);
}
arr.forEach(getSum,calc);
console.log('use forEach and change this:sum=' + calc.sum);

六、再填一法,又是看别人代码发现可以利用global对象的eval()方法结合Array原型提供的join()方法来简单的实现数组求和

eval(arr.join("+"));

这里先将所有数组项通过字符串"+"连为一个字符串"1+2+3+4+5+6",然后返回的这个字符串传给eval()方法,eval()方法接收了这段字符串后,就直接将这段字符串中的代码放在当前作用域下执行了。

日后发现了其他方式再补……
以上代码直接拷贝到浏览器console执行即可。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...