高阶函数
在JavaScript的世界中,万物皆为对象,而函数同样也是对象;
我们可以声明一个变量来指向函数对象,同样的,我们也可以用函数对象作为参数传递给另一个函数;
1 | function add(x, y, f) { |
f函数的实现可以是任意的,但是必须确保其至少接收一个参数,并有一个返回值:
1 | add(-5, 6, Math.abs) |
[TOC]
map
Array.map(callback(currentValue[, index, array])[, thisArg])
1
2
3
4
5
6
7
8
9 'use strict';
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
console.log(results);
reduce
Array.reduce(callback(acc[, currValue, index, array])[, initialValue])
initialValue在没有传递的情况下,默认是数组的第一个元素,在空数组中,没有传递则会报错!
将字符串装换为对应的数字:1
2
3
4
5'use strict';
function string2int(s) {
return s.split('').map(x => x*1).reduce(function(x, y){return x*10+y});
}
filter
arr.filter(callback(element[, index[, array]])[, thisArg])
1 | var arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry']; |
sort
array.sort([compareFunction])
如果不提供比较函数,那么默认的会将数组元素转换为字符,然后比较他们的ASCII码;
不同于其他的高阶函数,sort函数直接对Array内容进行修改,返回的结果数组和原来的数组是同一个数组;
正序排序:
1 | var arr = [10, 20, 1, 2]; |