javascript——常用基础API部分方法、面试题集合

javascript——常用基础API部分方法(函数)集合

字符串转化成驼峰表示法

将字符串foo="get-elment-by-id"转化成驼峰表示法"getElementById"

function combo(msg) {
  // 分割成字符串数组
  var arr = msg.split("-");
  // 从数组第二位开始遍历,首字母改为大写
  for (var i = 1; i < arr.length; i++) {
    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substr(1, arr[i].length - 1);
  }
  // 组合成字符串
  msg = arr.join("");
  return msg;
}

combo("get-elment-by-id");      // getElmentById

统一日期格式 YYYY-MM-DD

以 YYYY-MM-DD 的方式,输出今天的日期

var d = new Date();
var year = d.getFullYear();
// 获取月份,记得加一
var month = d.getMonth() + 1;
// 10以下变成两位
month = month < 10 ? '0' + month : month;
var day = d.getDate();
// 10以下变成两位
day = day < 10 ? '0' + day : day;

console.log(year + '-' + month + '-' + day);  // 2020-02-29

特殊字符转义

为了保证页面输出安全,我们经常需要对一些特殊的字符进行转义,请写一个函数 escapeHtml,将<, >, &, “进行转义

function escapeHtml(str) {
  return str.replace(/[<>"&]/g, function (match) {
    switch (match) {
      case "<":
        return "&lt;";
      case ">":
        return "&gt;";
      case "&":
        return "&amp;";
      case "\"":
        return "&quot;";
    }
  });
}

escapeHtml("<div>");      // &lt;div&gt;

生成几个不同的随机数

生成 5 个不同的随机数,每生成一次就和前面的所有数字相比较,如果有相同的,则放弃当前生成的数字

var num1 = [];
for (var i = 0; i < 5; i++) {
  // 生成随机数,范围是 [1, 10]
  num1[i] = Math.floor(Math.random() * 10) + 1;
  for (var j = 0; j < i; j++) {
    // 如果重复,重新进行本次循环
    if (num1[i] == num1[j]) {
      i--;
    }
  }
}

console.log(num1);      // 随机数组 [9, 1, 7, 10, 6]

范围内随机选取一组数字

用 js 实现随机选取 10–50之间的 10 个数字,存入一个数组,并排序。

function randomNub(aArray, len, min, max) {
  // 不符合条件
  if (len >= (max - min)) {
    return '超过' + min + '-' + max + '之间的个数范围' + (max - min - 1) + '个的总数';
  }
  // 达到数量后排序
  if (aArray.length >= len) {
    aArray.sort(function (a, b) {
      return a - b
    });
    return aArray;
  }
  // 生成随机数
  var nowNub = parseInt(Math.random() * (max - min - 1)) + (min + 1);
  // 防止重复
  for (var j = 0; j < aArray.length; j++) {
    if (nowNub == aArray[j]) {
      randomNub(aArray, len, min, max);
      return;
    }
  }
  aArray.push(nowNub);
  // 递归循环
  arguments.callee(aArray, len, min, max);
  return aArray;
}

var arr = [];
randomNub(arr, 10, 10, 50);     // 随机数组[20, 26, 28, 29, 30, 35, 40, 41, 44, 49]

提取URL中的各个GET参数

有这样一个 URL:http://item.taobao.com/item.htm?a=1&b=&c=xxx&d,请写一段 JS 程序提取 URL中的各个 GET 参数(参数名和参数个数不确定),将其按 key-value 形式返回到一个 json 结构中

function serilizeUrl(url) {
  var urlObject = {};
  // 是否有'?'
  if (/\?/.test(url)) {
    // 截取'?'以后的字符串,也可结合location对象获取
    var urlString = url.substring(url.indexOf("?") + 1);
    // 分割成字符串数组 ['a=1', 'b=', 'c=xxx', 'd']
    var urlArray = urlString.split("&");
    // 遍历 再次分割 [['a', '1'], ['b', ''], ['c', 'xxx'], ['d']]
    for (var i = 0, len = urlArray.length; i < len; i++) {
      var urlItem = urlArray[i];
      var item = urlItem.split("=");
      urlObject[item[0]] = item[1];
    }
    return urlObject;
  }
  return null;
}

var url = "http://item.taobao.com/item.htm?a=1&b=&c=xxx&d";
serilizeUrl(url);       // {a: "1", b: "", c: "xxx", d: undefined}

清除字符串前后的空格

写一个 function,清除字符串前后的空格。(兼容所有浏览器)

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^\s+/, "").replace(/\s+$/, "");
  }
}
var str = " \t\n test string ".trim();
console.log(str == "test string");      // true

统计出现最多的字符

判断一个字符串中出现次数最多的字符,统计这个次数

// 保存出现的字符并计次数
var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
  if (!json[str.charAt(i)]) {
    json[str.charAt(i)] = 1;
  } else {
    json[str.charAt(i)]++;
  }
};
// 查询出现次数最多的字符
var iMax = 0;
var iIndex = '';
for (var i in json) {
  if (json[i] > iMax) {
    iMax = json[i];
    iIndex = i;
  }
}

console.log('出现次数最多的是:' + iIndex + ',出现' + iMax + '次');

获取非行间样式

写一个获取非行间样式的函数

function getAttr(obj, attr) {
  var style;
  if (obj.currentStyle) {   //当有这个属性的时候currentStyle
    style = obj.currentStyle[attr]; //兼容IE
  }
  else {
    style = getComputedStyle(obj, false)[attr]; //主流浏览器
  }
  return style;
}

var box = document.getElementById('box');
getAttr(box, 'width');  // 200px

数字转化成RMB形式

// 转换成字符串并反转
function re(str) {
  str += '';
  return str.split("").reverse().join("");
}
// 转换为RMB格式
function toRMB(num) {
  var tmp = '';
  for (var i = 1; i <= re(num).length; i++) {
    tmp += re(num)[i - 1];
    if (i % 3 == 0 && i != re(num).length) {
      tmp += ',';
    }
  }
  return re(tmp);
}

toRMB(1234567); // 1,234,567

数组数字去重

用原型,去掉数组中重复的数字

Array.prototype.unique = function () {
  var n = []; //一个新的临时数组
  for (var i = 0; i < this.length; i++) //遍历当前数组
  {
    //如果当前数组的第 i 已经保存进了临时数组,那么跳过,
    //否则把当前项 push 到临时数组里面
    if (n.indexOf(this[i]) == -1) {
      n.push(this[i]);
    }
  }
  return n;
}

var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
arr.unique();   // [1, 2, 3, 4, 5, 6, 9, 25]

阶乘

原型方法

Number.prototype.N = function () {
  var re = 1;
  for (var i = 1; i <= this; i++) {
    re *= i;
  }
  return re;
}
var num = 5;

num.N();        // 120

递归方法

function jc(n){
  if(n<1) return 1;
  return n*arguments.callee(n-1);
}

jc(5);          // 120

计算字符串字节数

function strlen(s) {
  if (!arguments.length || !s) return 0;
  var len = 0;
  for (var i = 0; i < s.length; i++) {
    if (s.charCodeAt(i) > 255) len += 2; else len += 1; //charCodeAt()得到的是 unCode 码
  } //汉字的 unCode 码大于 255bit 就是两个字节
  return len;
}

strlen('哈哈123');        // 7

拆分字符串

specify(‘hello,world’)//=>’h,e,l,l,o,w,o,r,l,d’实现 specify 函数

function specify(str) {
  var tempArray = Array.prototype.filter.call(str, function (value) {
    return value >= 'A' && value <= 'z' && value != "_";
  });
  return tempArray.join(",");
}

specify("he____*(%$# !!!))))))llo,Wo@@@rld");   // h,e,l,l,o,W,o,r,l,d

FF 与 IE 中阻止事件冒泡

function stopPropagation(e) {
  e = e || window.event;
  if (e.stopPropagation) { //W3C 阻止冒泡方法
    e.stopPropagation();
  } else {
    e.cancelBubble = true; //IE 阻止冒泡方法
  }
}

用+-×÷和Math实现三目运算

只允许使用 + - * / 和 Math.* ,求一个函数 y = f(x, a, b);当 x > 100 时返回 a 的值,否则返回 b 的值,不能使用 if else 等条件语句,也不能使用|,?:,数组

function f(x, a, b) {
  var temp = Math.ceil(Math.min(Math.max(x - 100, 0), 1));
  return a * temp + b * (1 - temp);
}

f(10, 1, 2);    // 2

arguments实现加法函数

写一个函数可以计算 sum(5,0,-5);输出 0; sum(1,2,3,4);输出 10;

function sum() {
  var result = 0;
  var len = arguments.length;
  for (var i = 0; i < len; i++) {
    var num = arguments[i];
    if (typeof num == 'number') {
      result += num;
    }
  }
  return result;
}

sum(5,0,-5);    // 0
sum(1,2,3,4);   // 10