您的位置:首页 > 其它

数组求和方法比较

2016-04-20 23:50 435 查看

数组方法介绍:



every()      检测数值元素的每个元素是否都符合条件。

filter()      检测数值元素,并返回符合条件所有元素的数组。

map()        通过指定函数处理数组的每个元素,并返回处理后的数组。

some()      用于检测数组中的元素是否满足指定条件(函数提供)。

reduce()     数组中的每个值(从左到右)开始合并,最终为一个值

reduceRight()   数组中的每个值(从右到左)开始合并,最终为一个值

eval()       计算 JavaScript 字符串,并把它作为脚本代码来执行。

for      循环代码块一定的次数

while      当指定的条件为 true 时循环指定的代码块

do/while      同样当指定的条件为 true 时循环指定的代码块

for in      循环遍历对象的属性

forEach      调用数组中的每个元素。

具体方法及代码:

首先设定一个作为数据源的数组

var arr = [1, 2, 3, 4, 5, 6,7,8,9,10];


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


some()方法:

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


array.filter()方法:

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


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


froEach()方法:

(function() {
var sum = 0;

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


reduce()正向归并方法:

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


reduceRight()逆向归并方法:

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


for循环方法

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


while循环方法

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


for -in方法

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


forEach()方法(改写)

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


join()方法

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


效率比较:

console.time("getSum");
for (var i = 0; i < 1000000; i++){
sum = 0;
getSum(arr);
}
console.timeEnd("getSum");//获得计算时间;


比较:浏览器–Google Chrome

forEach方法(1264.000ms)<every方法(1276.000ms)<filter方法(1416.000ms)<some方法(1448.000ms)<reduce方法(4061.000ms)<map方法(4695.000ms)<for方法(8733.000ms)<while方法(9541.000ms)


参考文章:

《JavaScript Array 对象》;

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

《JavaScript学习笔记:数组求和方法 》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: