作者:十分风格的功夫_723 | 来源:互联网 | 2023-09-14 17:15
目录:
25.改变上下文
26.判断是否包含数字
27.属性遍历
28.检查重复字符串
29.获取指定字符串
30.判断是否符合指定格式
25.改变上下文
要求:
将函数 fn 的执行上下文改为 obj,返回 fn 执行后的值。
思路:
在Javascript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者apply的第一个参数传入即可。
function alterContext(fn, obj) {
return fn.call(obj,obj);
}
26.判断是否包含数字
要求:
给定字符串 str,检查其是否包含数字,包含返回 true,否则返回 false
思路:
判断字符串中是否含有数字,可以用正则表达式。/\d/可以匹配字符串中的数字字符,用test方法可以检测。
function containsNumber(str) {
var b = /\d/;
return b.test(str);
}
27.属性遍历
要求:
找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)
1、返回数组,格式为 key: value
2、结果数组不要求顺序
思路:
可以使用for-in来遍历对象中的属性,hasOwnproperty方法能返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法无法检查该对象的原型链中是否具有该属性,该属性必须为对象本身的属性。
function iterate(obj) {
var arr = [];
for(var key in obj){
if(obj.hasOwnProperty(key)){
arr.push(key+": "+obj[key]);
}
}
return arr;
}
28.检查重复字符串
要求:
给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false
思路:
在正则表达式中,利用()进行分组,使用斜杠加数字表示引用,\1就是引用第一个分组,\2就是引用第二个分组。将[a-zA-Z]做为一个分组,然后引用,就可以判断是否有连续重复的字母。
function containsRepeatingLetter(str) {
return /([a-zA-Z])\1/.test(str);
}
29.获取指定字符串
要求:
给定字符串 str,检查其是否包含连续3个数字
1、如果包含,返回最新出现的 3 个数字的字符串
2、如果不包含,返回 false
思路:
题目描述有问题,实际考察的是字符串中是否含有连续的三个任意数字,而不是三个连续的数字。依题,若存在连续的三个任意数字,则返回最早出现的三个数字,若不存在,则返回false。因此需要用到match方法,match()返回的是正则表达式匹配的字符串数组,连续的三个任意数字用正则表达式表示为/\d{3}/。
function captureThreeNumbers(str) {
var arr = str.match(/\d{3}/);
if(arr)
return arr[0];
else return false;
}
30.判断是否符合指定格式
要求:
给定字符串 str,检查其是否符合如下格式 1、XXX-XXX-XXXX 2、其中 X 为 Number 类型
//思路:
//本题需要注意格式,开头^和结尾$必须加上来限定字符串,3个数可表示为\d{3},4个数则为\d{4},{n}表示前面内容出现的次数。正则表达式可写作/^\d{3}-\d{3}-\d{4}$/,有相同部分\d{3}-,因此也可写作/^(\d{3}-){2}\d{4}$/
function matchesPattern(str) {
return/^(\d{3}-){2}\d{4}$/.test(str);
}