JS · javaScript面试题

775 阅读2分钟

来自 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;
    });
}