来自ManfredHu博客: http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/
1. 用reduce统计一个数组中有多少个不重复的单词
var arr = ["apple","orange","apple","orange","pear","orange"];
function getWordCnt(){
return arr.reduce(function(prev,next,index,arr){
prev[next] = (prev[next] + 1) || 1; //这句是重点
return prev;
},{});
}
console.log(getWordCnt());
2.给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false
function containsRepeatingLetter(str) {
return /([a-zA-Z])\1/.test(str); // \1指代第一个括号的匹配项
}
在正则表达式中,利用()进行分组,使用斜杠加数字表示引用,\1就是引用第一个分组,\2就是引用第二个分组。将[a-zA-Z]做为一个分组,然后引用,就可以判断是否有连续重复的字母。
3.已知fn为一个预定义函数,实现函数curryIt
需要补全的代码
var fn = function(a, b, c) {
return a + b + c
};
curryIt(fn)(1)(2)(3); //6
function curryIt(fn) {
//这里补充
}
可以试着玩一下,这里是用的函数的柯里化
var fn = function(a, b, c) {
return a + b + c
};
console.log(curryIt(fn)(1)(2)(3)); //6
function curryIt(fn) {
var len = fn.length; //获取函数形参数量
var slice = Array.prototype.slice;
var arg = slice.call(arguments, 1);
return function() {
arg = arg.concat(slice.call(arguments));
if(arg.length < len) { //当等于函数需要的形参数量时候调用
return arguments.callee;
}else{
return fn.apply(null,arg);
}
}
}
时间: 2024-10-08 10:44:46