来自 github.com/haizlin/fe-… 的面试题,收录其中部分
javaScript题目
[js] 第2天写一个方法去掉字符串中的空格
Regex: string.replace(/\s/g, '')
join: string.split(' ').join('')
var str = ' 1 2 3445 6 ';
console.log(str.split(' ').join('')) // 输出"1234456"
[js] 第3天 去除字符串中最后一个指定的字符
function delLast (str,del) {
if (tpeof str !== 'string') {
alert('请确认要删除的对象为字符串!');
retrun false;
} else {
let index = str.lastIndexOf(del);
str.substring(0,index ) + str.substring(index+1,str.length);
}
}
[js] 第4天 写一个方法把下划线命名转成大驼峰命名
function toCamel(str) {
return str.replace(/(\w)(_)(\w)/g, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`)
}
console.log(toCamel('a_bc_def')) // aBcDef
上面的方法对 a_c_def 会返回 aC_def,想要返回 ACDef 得:
function toCamel(str) {
str = str.replace(/(\w)/, (match, $1) => `${$1.toUpperCase()}`)
while(str.match(/\w_\w/)) {
str = str.replace(/(\w)(_)(\w)/, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`)
}
return str
}
console.log(toCamel('a_c_def')) // ACDef
[js] 第5天 写一个把字符串大小写切换的方法
function caseConvert(str){
return str.replace(/([a-z]*)([A-Z]*)/g, (m, s1, s2)=>{
return `${s1.toUpperCase()}${s2.toLowerCase()}`
})
}
caseConvert('AsA33322A2aa') //aSa33322a2AA
[js] 第6天 写一个去除制表符和换行符的方法
var str = '大家好 阿斯蒂芬阿斯顿\n发生的发生';
function fn(str) {
var s = str.replace(/[\t\n\v\r\f]+/g,'');
return s;
}
console.log(fn(str))
[js] 第7天 统计某一字符或字符串在另一个字符串中出现的次数
return str.split(target).length - 1
return (str.match(new RegExp(target, 'g')).length);
[js] 第8天 写一个加密字符串的方法
function strEncrypt(str) {
return str.split('').map(s => {
return String.fromCharCode(s.charCodeAt() + 1)
}).join('')
}
console.log(strEncrypt('hello world')) // ifmmp!xpsme
escape("我是被简单的加密了") // "%u6211%u662F%u88AB%u7B80%u5355%u7684%u52A0%u5BC6%u4E86"
[js] 第9天 写一个判断数据类型的方法
function myType(v){
return Object.prototype.toString.call(v).replace(/^.{8}(.+)]$/,(m,$1)=> $1.toLowerCase());
}
typeof 不能判读 数组 和 对象
Object.prototype.toString.call() // "Array", "Function", "Object", "RegExp", "Date" //"[object Array]"
typeof obj // "Boolean", "Number", "String"
[js] 第12天 写一个获取当前url查询字符串中的参数的方法
url = "https://github.com/kk?tab=stars&assetId=311&page=DETAIL&projectPhase=2";
function splitUrl(url) {
if(typeof url !== "string") return;
var obj = {};
url.split("?")[1].split("&").forEach(item => {
const [key, value] = item.split('=');
obj[key] = decodeURIComponent(value);
})
console.log(obj);
}
splitUrl(url);
window.location.search // 可以直接获取,如果结合上面方法可以省一些代码
[js] 第15天 写一个数组去重的方法(支持多维数组)
1.
function flat(arr, target) {
arr.forEach(item => {
if (Array.isArray(item)) {
flat(item, target)
} else {
target.push(item)
}
})
}
function flatArr(arr) {
let result = []
flat(arr, result)
return result
}
function uniqueArr(arr) {
return [...new Set(flatArr(arr))]
}
const result = uniqueArr([1, 2, 3, 4, [3, 4, [4, 6]]])
console.log(result) // 1,2,3,4,6
2.
[1,2,3,4,4,5,5,2].filter((item, index, arr) => arr.indexOf(item) === index)
[js] 第21天 写一个方法验证是否为中文
function isChinese(str) {
return /^[\u4e00-\u9fa5]+$/.test(str);
}
[js] 第24天 如何快速让一个数组乱序
arr.sort((a, b) => Math.random() - .5)
不过我们team随机算法也用的洗牌算法,思路就是从后往前遍历,然后随机(0, i+1),交换
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1))
[array[i], array[j]] = [array[j], array[i]]
}
}
[js] 第30天 写一个方法判断字符串是否为回文字符串
function cheackstr(str){
var reversestr=str.split("").reverse().join("");
if(str===reversestr){
alert("我是回文字符串");
}else{
alert("我不是回文字符串")
}
}
[js] 第49天 写个还剩下多少天过年的倒计时
const day = Math.floor((new Date('2019-12-31 23:59:59:999') - new Date()) / 864e5)
[js] 第61天 写一个方法获取图片的原始宽高
function loadImageAsync(url) {
return new Promise(function(resolve, reject) {
var image = new Image();
image.onload = function() {
var obj = {
w: image.naturalWidth,
h: image.naturalHeight
}
resolve(obj);
};
image.onerror = function() {
reject(new Error('Could not load image at ' + url));
};
image.src = url;
});
}