前言:
- 高阶函数(Higher-Order Function)就是操作其他函数的函数
一、map()
按照同一规则 改变数组内的每个值
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4];
var results = arr.map(pow); // [1, 4, 9, 16]
results = results.map(String); // ['1', '4', '9', '16',]
二、reduce()
对数组中的每个元素执行一个由您提供的reducer函数(升序执行)
将其结果汇总为单个返回值
var arr = [1, 3, 5, 7, 9];
var sum = arr.reduce(function (x, y) {
return x + y;
}); // 25
var integer = arr.reduce(function (x, y) {
return x * 10 + y;
}); // 13579
三、filter()
过滤掉数组中的某些元素,然后返回剩下的元素
返回值是true还是false决定了保留还是丢弃该元素
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
}); // [1, 5, 9 ,15]
// 回调函数
var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
console.log(element); // 依次打印 Value 值 'A', 'B', 'C'
console.log(index); // 依此打印 Key 值 0, 1, 2
console.log(self); // self 就是变量 arr
return true;
});
// 用回调函数去掉 Array 重复元素, indexOf 总是返回第一个元素的位置
var m,
arr = ['apple', 'strawberry', 'banana', 'pear', 'apple'];
m = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
}); // ['apple', 'strawberry', 'banana', 'pear'];
四、sort()
该函数用来排序
['Google', 'Apple', 'Microsoft'].sort();
// ['Apple', 'Google', 'Microsoft']
// 字符串根据ASCII码进行排序
// 而小写a的ASCII码在大写字幕之后
['Google', 'apple', 'Microsoft'].sort();
// ['Google', 'Microsoft', 'apple']
// sort() 方法默认把所有元素先转换为String再排序
// 结果 '10' 排在了 '2' 的前面
// 因为字符 '1' 比字符 '2' 的 ASCII 码小
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]
// sort() 还可以接收一个比较函数来实现自定义的排序
// 数字大小排序
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y)
return -1;
if (x > y)
return 1;
return 0;
}); // arr的值变为 [1, 2, 10, 20]
// 字符串排序
var arr = ['Google', 'apple', 'Microsoft'];
arr.sort(function (s1, s2) {
var x1 = s1.toUpperCase();
var x2 = s2.toUpperCase();
if (x1 < x2)
return -1;
if (x1 > x2)
return 1;
return 0;
}); // ['apple', 'Google', 'Microsoft'];
// 数组比较
var a1 = ['B', 'A', 'C'];
var a2 = al.sort();
a1; // ['A', 'B', 'C']
a2; // ['A', 'B', 'C']
a1 === a2; // true, a1 和 a2 是同一个对象