题目描述 给定字符串 str,检查其是否包含数字,包含返回 true,否则返回 false 示例1 输入 ‘abc123’ 输出 true
解决方法: 正则表达式
function containsNumber(str) {
var b = /\d/;
return b.test(str);
}
题目描述 给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false 示例1 输入 ‘rattler’ 输出 true
解决方法: 在正则表达式中,利用()进行分组,使用斜杠加数字表示引用,\1就是引用第一个分组,\2就是引用第二个分组。将[a-zA-Z]做为一个分组,然后引用,就可以判断是否有连续重复的字母。
function containsRepeatingLetter(str) {
return /([a-zA-Z])\1/.test(str);
}
题目描述 给定字符串 str,检查其是否以元音字母结尾 1、元音字母包括 a,e,i,o,u,以及对应的大写 2、包含返回 true,否则返回 false 示例1 输入 ‘gorilla’ 输出 true
解决方法: 正则表达式
function endsWithVowel(str) {
var reg = /(a|o|e|i|u)$/gi;
return reg.test(str);
}
题目描述 给定字符串 str,检查其是否包含 连续3个数字 1、如果包含,返回最先出现的 3 个数字的字符串 2、如果不包含,返回 false 示例1 输入 ‘9876543’ 输出 987
解决方法: 正则表达式
function captureThreeNumbers(str) {
var reg;
if(reg = str.match(/(\d{3})/)){
return reg[0];
}else{
return false;
}}
题目描述 给定字符串 str,检查其是否符合如下格式 1、XXX-XXX-XXXX 2、其中 X 为 Number 类型 示例1 输入 ‘800-555-1212’ 输出 true
解决方法: 正则表达式 本题需要注意格式,开头和结尾必须加上来限定字符串,3个数可表示为\d{3},4个数则为\d{4},{n}表示前面内容出现的次数。正则表达式可写作/^\d{3}-\d{3}-\d{4}/,有相同部分\d{3}-,因此也可写作/(\d{3}-){2}\d{4}
function matchesPattern(str) {
var reg = /^\d{3}-\d{3}-\d{4}$/;
return reg.test(str);
}
题目描述 给定字符串 str,检查其是否符合美元书写格式 1、以 开始 2、整数部分,从个位起,满 3 个数字用 , 分隔 3、如果为小数,则小数部分长度为 2 4、正确的格式如:1,023,032.03 或者 2.03,错误的格式如:3,432,12.12 或者 34,344.3 示例1 输入 ‘20,933,209.93’ 输出 true
解决方法: 正则表达式
function isUSD(str) {
var reg = /^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2}?$)/;
return reg.test(str);
}
题目描述 查找两个节点的最近的一个共同父节点,可以包括节点自身 输入描述: oNode1 和 oNode2 在同一文档中,且不会为相同的节点
解决方法: parentNode
function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2)){
return oNode1;
}else{
return commonParentNode(oNode1.parentNode,oNode2);
}
}
题目描述 根据包名,在指定空间中创建对象 输入描述: namespace({a: {test: 1, b: 2}}, ‘a.b.c.d’) 输出描述: {a: {test: 1, b: {c: {d: {}}}}}
解决方法: hasOwnProperty
function namespace(oNamespace, sPackage) {
var packNameArr=sPackage.split(".");
var curObj=oNamespace;
for(var i=0;i<packNameArr.length;i++){
if(!curObj.hasOwnProperty(packNameArr[i])){
curObj[packNameArr[i]]={};
curObj=curObj[packNameArr[i]];
}
}
return oNamespace;
}
题目描述 为 Array 对象添加一个去除重复项的方法 示例1 输入 [false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’, ‘a’, NaN] 输出 [false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’]
解决方法: ES6
Array.prototype.uniq = function () {
return [...new Set(this)];
}
// 法二
Array.prototype.uniq = function () {
var resArr = [];
var flag = true;
for(var i=0;i<this.length;i++){
if(resArr.indexOf(this[i]) == -1){
if(this[i] != this[i]){ //排除 NaN
if(flag){
resArr.push(this[i]);
flag = false;
}
}else{
resArr.push(this[i]);
}
}
}
return resArr;
}
题目描述 用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
解决方法: 递归
function fibonacci(n) {
if(n==1||n==2)
return 1;
return fibonacci(n-1)+fibonacci(n-2);
}
题目描述 按所给的时间格式输出指定的时间 格式说明 对于 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 结果为 五 示例1 输入 formatDate(new Date(1409894060000), ‘yyyy-MM-dd HH:mm:ss 星期w’) 输出 2014-09-05 13:14:20 星期五
解决方法: 时间格式化
function formatDate(oDate, sFormation) {
var add0 = function(num){
if(num<10)
return 0+""+num;
else
return num;
}
var o = {
"yyyy":oDate.getFullYear(),
"yy":oDate.getFullYear()%100,
"MM":add0(oDate.getMonth()+1),
"M":oDate.getMonth()+1,
"dd":add0(oDate.getDate()),
"d":oDate.getDate(),
"HH":add0(oDate.getHours()),
"H":oDate.getHours(),
"hh":add0(oDate.getHours()%12),
"h":oDate.getHours()%12,
"mm":add0(oDate.getMinutes()),
"m":oDate.getMinutes(),
"ss":add0(oDate.getSeconds()),
"s":oDate.getSeconds(),
"w":function(){
var day = ["日","一","二","三","四","五","六"];
return day[oDate.getDay()];
}(),
}
for(var k in o){
sFormation = sFormation.replace(k,o[k]);
}
return sFormation;
}
题目描述 如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1 否则如果字符 Unicode 编码 > 255 则长度为 2 示例1 输入 ‘hello world, 牛客’, false 输出 17
解决方法: charCodeAt()
function strLength(s, bUnicode255For1) {
if( bUnicode255For1 ){
return s.length;
}else{
var len = s.length;
for( var i=0; i<s.length; i++ ){
if( s.charCodeAt(i) > 255 ){
len++;
}
}
return len;
}
}
题目描述 判断输入是否是正确的邮箱格式 输入描述: 邮箱字符串 输出描述: true表示格式正确
解决方法: 正则表达式
function isAvailableEmail(sEmail) {
var reg=/^([\w+\.])+@\w+([.]\w+)+$/;
return reg.test(sEmail);
}
题目描述 将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff rgb 中每个 , 后面的空格数量不固定 十六进制表达式使用六位小写字母 如果输入不符合 rgb 格式,返回原始输入 示例1 输入 ‘rgb(255, 255, 255)’ 输出 #ffffff
解决方法: 正则表达式
function rgb2hex(sRGB) {
return sRGB.replace(/^rgb\((\d+)\s*\,\s*(\d+)\s*\,\s*(\d+)\)$/g, function(a, r, g, b){
return '#' + hex(r) + hex(g) + hex(b);
});
}
function hex(n){
return n < 16 ? '0' + (+n).toString(16) : (+n).toString(16);
}
题目描述 css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能
解决方法: 正则表达式
function cssStyle2DomStyle(sName) {
return sName.replace(/\-[a-z]/g , function(a, b){
return b == 0 ? a.replace('-','') : a.replace('-','').toUpperCase();
});
}
题目描述 统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率
解决方法: 正则表达式
function count(str) {
var obj = {};
str.replace(/\S/g,function(s){
!obj[s]?obj[s]=1:obj[s]++;
})
return obj;
}
// 法②
function count(str) {
for(var i=0, m=str.length, res={}; i<m; i++){
if(str.charAt(i) in res) res[str.charAt(i)]++;
else res[str.charAt(i)] = 1;
}
return res;
}
以上这篇JS题目均来自牛客网,感兴趣的也可以前往牛客网在线编程练习。同时如果文中有不当之处,也欢迎指正,谢谢!
本文由来源 jackaroo2020,由 javajgs_com 整理编辑,其版权均为 jackaroo2020 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。