概述
一、 封装函数 f,使 f 的 this 指向指定的对象
function bindThis(f, oTarget) {
return f.bind(oTarget)
}
二、 获取 url 参数
1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定参数名称,返回全部的参数对象 或者 {}
3. 如果存在多个同名参数,则返回数组
输入: http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe
输出: [1,2,3]
function getUrlParam (url, key) {
url = url.split('#')[0]; // 去除#后面的内容
var args = url.split('?');
if (args[0] === url) {
return url;
}
var obj = {};
var arg = args[1].split('&');
for (var i in arg) {
var a = arg[i].split('=');
if (obj[a[0]]) { //重复键的值用数组存放
obj[a[0]] = [].concat(obj[a[0]], a[1]);
} else {
obj[a[0]] = a[1];
}
}
if (key || key === '') { //有参数
return obj[key] || '';
}
if (key === undefined) { //无参数
return obj;
}
}
三、 查找两个节点的最近的一个共同父节点,可以包括节点自身
function commonParentNode(oNode1, oNode2) {
for (; oNode1; oNode1=oNode1.parentNode) {
if (oNode1.contains(oNode2)) {
return oNode1;
}
}
}
四、根据包名,在指定空间中创建对象
1. 输入:namespace({a: {test: 1, b: 2}}, 'a.b.c.d')
2. 输出:{a: {test: 1, b: {c: {d: {}}}}}
function namespace (oNamespace, sPackage) {
var a = sPackage.split('.');
var o = oNamespace;
a.forEach(function (v) {
if (typeof o[v] === 'undefined') {
o[v] = {}
}
o = o[v];
})
return o;
}
五、 为 Array 对象添加一个去除重复项的方法
1. 输入:[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
2. 输出:[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
Array.prototype.uniq = function () {
var a = [];
var flag = true;
this.forEach(function (v) {
if (a.indexOf(v) === -1) {
if (v !== v) {
if (flag) {
a.push(v);
flag = false;
}
} else {
a.push(v);
}
}
})
return a;
}
六、 用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
function fibonacci(n) {
if (n == 1 || n == 2) {
return 1;
}
return fibonacci(n-2) + fibonacci(n-1);
}
七、按所给的时间格式输出指定的时间
格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五
输入:formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
输出:2014-09-05 13:14:20 星期五
function formatDate (t,str) {
var obj = {
yyyy: t.getFullYear(),
yy: (''+t.getFullYear()).slice(-2),
MM: ('0'+(t.getMonth()+1)).slice(-2),
M: t.getMonth()+1,
dd: ('0'+t.getDate()).slice(-2),
d: t.getDate(),
HH: ('0'+t.getHours()).slice(-2),
H: t.getHours(),
hh: ('0'+t.getHours()%12).slice(-2),
h: t.getHours()%12,
m:t.getMinutes(),
mm:("0" + t.getMinutes()).slice(-2),
ss: ('0'+t.getSeconds()).slice(-2),
s: t.getSeconds(),
w: ['日', '一', '二', '三', '四', '五', '六'][t.getDay()]
}
return str.replace(/([a-z]+)/ig, function($1) { return obj[$1] } );
}
八、获取字符串的长度
如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1否则如果字符 Unicode 编码 > 255 则长度为 2
function strLength (str, bUnicode255For1) {
if ( bUnicode255For1) {
return str.length;
}
var count = 0
for (var i=0, len=str.length; i<len; i++) {
if (str.charCodeAt(i) > 255) {
count += 2;
} else {
count += 1;
}
}
return count;
}
九、 判断输入是否是正确的邮箱格式
function isAvailableEmail(sEmail) {
var reg = /^(w+)(.w+)*@(w+)(.w{2,3}){1,3}/;
return reg.test(sEmail);
}
十、 将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff
1. rgb 中每个 , 后面的空格数量不固定
2. 十六进制表达式使用六位小写字母
3. 如果输入不符合 rgb 格式,返回原始输入
function rgb2hex(sRGB) {
var r = /^rgb((d{1,3}),s*(d{1,3}),s*(d{1,3}))/g;
return sRGB.replace(r, function (a, r, g, b) {
return '#' + hex(r) + hex(g) + hex(b);
})
function hex (x) {
return x = x > 16 ? (+x).toString(16) : '0'+(+x).toString(16);
}
}
十一、 css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能
1. 以 - 为分隔符,将第二个起的非空单词首字母转为大写
2. -webkit-border-image 转换后的结果为 webkitBorderImage
function cssStyle2DomStyle(sName) {
if (sName[0] === '-') {
sName = sName.slice(1)
}
var i=0, len=sName.length, str='';
for (i; i < len; i++) {
if (sName[i] === '-') {
str += sName[i+1].toUpperCase()
i += 2;
}
str += sName[i]
}
return str;
}
十二、 统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
1. 不限制 key 的顺序
2. 输入的字符串参数不会为空
3. 忽略空白字符
function count(str) {
var obj = {};
var i=0, len=str.length;
for (i; i<len; i++) {
if (obj[str[i]]) {
obj[str[i]] ++
} else {
obj[str[i]] = 1;
}
}
return obj;
}
最后
以上就是雪白八宝粥为你收集整理的牛课--前端题的全部内容,希望文章能够帮你解决牛课--前端题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复