在这里所谓高阶函数,只是对函数方法进行组装和进阶。。。
1、sort() 对数组进行排序
document.write([1,2,5,4].sort());
这是最简单不过的数组排序语句了。实际上 Array.prototype.sort() 还能够支持一个可选的参数“比较函数”,其形式如 sort(fn),fn是一个函数类型(Function)的值
2、sort()使用匿名函数制定排序算法
var a = new Object();
var b = new Object();
var c = new Object();
a.id = 1;
b.id = 2;
c.id = 3;
a.date = new Date(2006,3,12);
b.date = new Date(2006,1,15);
c.date = new Date(2006,2,10);
// 存放在arr数组中 var arr = [a, b, c];
使用默认的排序
console.log(arr.sort());
这时看到id的顺序是:1 2 3
加入新排序算法后
arr.sort(
function (x,y) {
return x.date-y.date;
}
);
console.log(arr);
输出的id顺序是:2 3 1
3、定义标签
replace() 替换字符串
function wrap(tag) {
var stag = '<' + tag + '>';
var etag = '</' + tag.replace(/s.*/,'') + '>'; // s.* 匹配任何不可见的元素,包括空格、制表符、换页符等等 return function(x) { // 返回一个函数 return stag + x + etag;
}
}
// 演示 var B = wrap('B');
document.write(B('粗粗体字'));
// 完全等价于 document.write('<br>');
document.write(wrap('B')('粗体字'));
4、自定义函数进行数组过滤
function filter(arr,callback){
var i,out=[];
for(i=0;i<arr.length;i++){
if(callback(arr[i])) { // 判断callback(arr[i]) 是否为真,如果为真则执行 (0为假) out.push(arr[i]);
}
}
return out;
}
console.log(filter([1,2,3,4,5], function(item) {
return item%2;
})); // [1, 3, 5]
安全进阶
function map(arr,callback){
var i,l= arr && arr.length || 0,out = new Array(l);
for(i=0;i<l;i++)
out[i]=callback(arr[i]);
return out;
}
console.log(map([1,2,3,4,5], function(item) {
return item + 2;
})); // [3, 4, 5, 6, 7]
提示:l = arr && arr.length || 0 如果arr为真则继续执行&&运算,如果arr为假则直接执行||运算
对数组元素进行操作运算(虽然比较绕人,但看了这三个感觉都差不多 )
function fold(arr,callback,b){
var i,x;
if(b) {
x=b,i=0;
} else {
x=arr[0],i=1;
}
for(;i<arr.length;i++) {
x=callback(arr[i],x);
}
return x; // 返回处理后的数据 }
console.log(fold([1,2,3,4,5], function(a, b) {
return a+b;
}, 0)); // 15
谢谢关注~