常见的几个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]')
复制代码

转载于:https://juejin.im/post/5cb52904e51d456e811d2695

你可能感兴趣的:(常见的几个js笔试题)