常见的几个js笔试题

冒泡排序算法

  1. 原理:比较相邻的两个元素,如果前一个比后一个大,则交换位置
function sort(data) { let i, j, swap; for (i = 0; i < data.length; i++) { for (j = 0; j < data.length; j++) { if (data[i] < data[j]) { swap = data[j]; // 定义一个交换容器 data[j] = data[i]; data[i] = swap; } } } return data; } sort([1, 3, 2, 5, 4]); 复制代码

数组去重
  1. 原理:新建一新数组,遍历传入数组,值不在新数组就 push 进该新数组中
function uniq(array) { let temp = []; // 一个新的数组 for (let i = 0; i < array.length; i++) { // 判断条件可以使用Es7提供的 includes方法 if (temp.indexOf(array[i]) == -1) { temp.push(array[i]); } } return temp; } let array = [1, 1, 1, 2, 2, 3, 4, 3, 5, 5]; console.log(uniq(array)); [...new Set(array)]; // Es6使用扩展运算符进行去重 复制代码

字符串转驼峰(border-bottom-color ----> borderBottomColor)
  1. 使用 split('-')将带有-的字符串分割成数组
  2. 使用循环处理数组的每一项(数组的第一项不用处理)
  3. 使用 charAt(0)获取字符串的第一个字符 (也可以 string[0]-->获取字符串的第一个字符)
  4. 使用 toUpperCase()方法将字母变成大写
  5. 拼接处理后的首字母与 arr[i].substring(1)
  6. 使用 arr.join('')将数组变成字符串
function change(string) { let arr = string.split("-"); // 注意要从第二项开始既索引值为1 for (let i = 1; i < arr.length; i++) { arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1); } let str = arr.join(""); return str; } console.log(change("border-bottom-color")); 复制代码

查找字符串中出现次数最多的字符串
  1. 原理: 利用对象的 key 值是唯一值,设置字符串的每一项为 key 值
  2. 初始化 value 值为 1 如果对象中存在 key 值则 value++
  3. 通过 Object.keys(obj) 获取对象中所有 key 的值返回数组
  4. 通过 Object.values(obj); 获取所有 value 返回数组
  5. 通过 Math.max()获取一组数据中的最大值
function getMax(str) { let obj = {}; for (let i in str) { obj[str[i]] ? obj[str[i]]++ : (obj[str[i]] = 1); } let keys = Object.keys(obj); let vals = Object.values(obj); let maxVal = Math.max(...vals); return { max: keys[vals.indexOf(maxVal)], number: maxVal }; } console.log(getMax("adfasdfadsfsa111qwqer222223r")); 复制代码

编写一个产生在 m、n 之间的随机整数的方法
  1. 原理:Math.round()把数四舍五入为最接近的整数。
  2. Math.random() 产生一个 0 ~ 1 的随机数
function random(m, n) { return Math.round(Math.random() * (n - m)) + m; } console.log(random(20, 30)); //20--30之间整数 复制代码

数组中每一项变为 number 类型
  1. parseInt() 函数可解析一个字符串,并返回一个整数。
function arrItemSwitchNumber(arr) { return arr.map(item => { return parseInt(item); }); } console.log(arrItemSwitchNumber(["1", "2", "3"])); 复制代码

二分算法
  1. 原理:从数组中间值开始查找,如果中间值大于目标值则取取左边,小于取右边,重新传值回调
function helfSearch(ary, num) { let len = ary.length; let middle = Math.floor(len / 2); let mNum = ary[middle]; if (len === 0) return null; else if (mNum === num) return middle; else if (mNum > num) return helfSearch(ary.slice(0, middle), num); else return helfSearch(ary.slice(middle + 1), num); } //查找某个元素在数组中的位置 console.log("我是二分算法" + helfSearch([1, 2, 3, 4, 5, 6, 7, 8], 1)); 复制代码

获取到页面中所有选中的 checkbox 怎么做?
  1. 原理:获取所有的复选框[ele:所有复选框的css选择器]
  2. 设置一个存放复选框val的数组
  3. 筛选出选中复选框的元素,向check_val中push val值
function getCheckboxVal(ele) { //获取所有的复选框[ele:所有复选框的css选择器] let check_ele = document.querySelectorAll(ele); let check_val = []; //存放复选框val的数组 for (let k in check_ele) { //筛选出选中复选框的元素,向check_val中push val值 if (check_ele[k].checked) check_val.push(check_ele[k].value); } return check_val } getCheckboxVal('.box input[type = checkbox]') 复制代码

【常见的几个js笔试题】转载于:https://juejin.im/post/5cb52904e51d456e811d2695

    推荐阅读