JavaScript 有用的代码片段和 trick

浮点数取整

const x = 123.4545;
x >> 0; // 123
~~x; // 123
x | 0; // 123
Math.floor(x); // 123

注意:前三种方法只适用于32个位整数,对于负数的处理上和 Math.floor是不同的。

Math.floor(-12.53); // -13
-12.53 | 0; // -12

生成6位数字验证码

// 方法一
('000000' + Math.floor(Math.random() * 999999)).slice(-6);
// 方法二
Math.random().toString().slice(-6);
// 方法三
Math.random().toFixed(6).slice(-6);
// 方法四
'' + Math.floor(Math.random() * 999999);

16进制颜色代码生成

(function() {
 return '#'+('00000'+
 (Math.random()*0x1000000<<0).toString(16)).slice(-6);
})();

驼峰命名转下划线

'componentMapModelRegistry'.match(/^[a-z][a-z0-9]+|[A-Z][a-z0-9]*/g).join('_').toLowerCase(); // component_map_model_registry

url查询参数转json格式

// ES6
const query = (search = '') => ((querystring = '') => (q => (querystring.split('&').forEach(item => (kv => kv[0] && (q[kv[0]] = kv[1]))(item.split('='))), q))({}))(search.split('?')[1]);

// 对应ES5实现
var query = function(search) {
 if (search === void 0) { search = ''; }
 return (function(querystring) {
 if (querystring === void 0) { querystring = ''; }
 return (function(q) {
  return (querystring.split('&').forEach(function(item) {
  return (function(kv) {
   return kv[0] && (q[kv[0]] = kv[1]);
  })(item.split('='));
  }), q);
 })({});
 })(search.split('?')[1]);
};
query('?key1=value1&key2=value2'); // es6.html:14 {key1: "value1", key2: "value2"}

获取URL参数

function getQueryString(key){
 var reg = new RegExp("(^|&)"+ key +"=([^&]*)(&|$)");
 var r = window.location.search.substr(1).match(reg);
 if(r!=null){
  return unescape(r[2]);
 }
 return null;
}

n维数组展开成一维数组

var foo = [1, [2, 3], ['4', 5, ['6',7,[8]]], [9], 10];
// 方法一
// 限制:数组项不能出现`,`,同时数组项全部变成了字符数字
foo.toString().split(','); // ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
// 方法二
// 转换后数组项全部变成数字了
eval('[' + foo + ']'); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// 方法三,使用ES6展开操作符
// 写法太过麻烦,太过死板
[1, ...[2, 3], ...['4', 5, ...['6',7,...[8]]], ...[9], 10]; // [1, 2, 3, "4", 5, "6", 7, 8, 9, 10]
// 方法四
JSON.parse(`[${JSON.stringify(foo).replace(/\[|]/g, '')}]`); // [1, 2, 3, "4", 5, "6", 7, 8, 9, 10]
// 方法五
const flatten = (ary) => ary.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
flatten(foo); // [1, 2, 3, "4", 5, "6", 7, 8, 9, 10]
// 方法六
function flatten(a) {
 return Array.isArray(a) ? [].concat(...a.map(flatten)) : a;
      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/256.html