使用函数处理数组
先看一个求平均值的例子,标准差的计算公式是:- 用循环的写法
var data = [1,3,7,11,22,55]
var total = 0
for(var i=0;i<data.length;i++)
total = total+data[i]
var average = total/data.length
total = 0
for(i=0;i<data.length;i++){
total = total+(data[i]-average)*(data[i]-average)
}
var stddev = Math.sqrt(total/(data.length-1))
console.log(stddev) //20.275601100830524
- 使用map和reduce
var data = [1,3,7,11,22,55]
var add = function(a,b){return a+b}
var average = data.reduce(add)/data.length
var fun = function(x){return (x-average)*(x-average)}
var total = data.map(fun).reduce(add)
var stddev = Math.sqrt(total/(data.length-1))
console.log(stddev) //20.275601100830524
高阶函数
所谓高阶函数,就是操作函数的函数,它接受一个或多个函数作为参数,并返回一个新函数。
function not(f){
return function(){
var result = f.apply(this,arguments)
return !result
}
}
var even = function(x){
return x%2===0
}
var odd = not(even)
var a = [1,3,4,7,9,12]
a.every(odd) //false
odd(5) //true
not是一个高阶函数,它的作用是生成一个新函数,新函数的计算结果总与传入函数的结果相反。