JS中Array对象的高阶函数

版权声明:wuyujin1997 reserve all rights. https://blog.csdn.net/wuyujin1997/article/details/88778399

高阶函数

高阶函数(Higher-order function),就是接受其他函数作为参数之一的函数

实例:

function add(x, y, f) {
    return f(x) + f(y);
}

// 调用:
add(-2, -3, Math.abs);

Array对象的几种高阶函数。

  • sort() 对数组元素进行排序(原地算法 In-place Algorithm),并返回当前数组(已排序)。默认排序是先将数组元素全部转换为字符串,然后根据字符串Unicode码点
    arr.sort(?compareFn), 其中高阶函数compareFn的函数声明为:compareFn(a, b)
  • filter() 将所有在过滤函数中返回true的元素放进一个新的数组中并返回。
    arr.filter(callbackFn, ?thisArg), 其中callbackFn(element, ?index, ?array)
  • map() 返回一个由回调函数的返回值组成的新数组。
    arr.map(callbackFn, ?thisArg), 其中callbackFn(currentValue, ?index, ?array)
  • reduce() 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的反追至。
    arr.reduce(callbackFn, ?initialValue), 其中callbackFn(accumulator, currentValue, ?currentIndex, ?array)
  • reduceRight() 从右边开始,从右向左。
    arr.reduceRight(callbackFn, ?initialValue), 其中callbackFn(previousValue, currentValue, ?currentValue, ?array)

code

  • sort(?coompareFn)
arr = [1, 5, 6, 22, 34];
arr.sort();
// [1, 22, 34, 5, 6],默认排序是根据字符串码点。

arr.sort(function(a, b) {
	return a - b;
});
// [1, 22, 34, 5, 6]
  • filter(callbackFn, ?thisArg)
arr = [1,2,3,4,5,6];
arr.filter(function(element, index, array) {
	return element % 2 == 0;	// 过滤偶数。
});
// (3) [2, 4, 6]

arr = [1, 5, 6, "234", false];
arr.filter(function(element, index, array) {
  return (typeof element == "number");	// 过滤数值
});
// (3) [1, 5, 6]
  • map(callbackFn, ?thisArg)
arr = [1, 2, 3, 4, 5];
arr.map(function(currentValue, index, array) {
	return Math.pow(currentValue, 2);	// 返回数组元素的2次方。
});
// (5) [1, 4, 9, 16, 25]
  • reduce(callbackFn, ?initialValue)
arr = [1, 2, 3, 4, 5];
arr.reduce(function(accumulator, currentValue, currentIndex, array) {
	return accumulator + currentValue;	// 数组元素求和
});
// 把数组元素拼接成一个字符串
arr = [1, 2, 3, false, "test", null, undefined];
arr.reduce(function(accumulator, currentValue, currentIndex, array) {
	return accumulator + currentValue;
}, "");	// initialValue为空字符串""。
  • reduceRight(callbackFn, ?initialValue)
// reduceRight()与reduce()不同的是:方向从右向左。
arr = [1, 2, 3, 4, 5];
arr.reduce(function(accumulator, currentValue, currentIndex, array) {
	return accumulator + currentValue;
}, "");	// "12345"
arr.reduceRight(function(accumulator, currentValue, currentIndex, array) {
	return accumulator + currentValue;
}, "");	// "54321"

猜你喜欢

转载自blog.csdn.net/wuyujin1997/article/details/88778399
今日推荐