零碎代码大杂烩

零碎代码大杂烩

移动端滑动
   // 增加移动端滑动
   var startX, endX;
   var mlen;
   self.on('touchstart', function(e){
     // e.cancelable && e.preventDefault();
     var touch = e.originalEvent.changedTouches[0];
     startX = touch.pageX;
   }).on('touchend', function(e){
     // e.cancelable && e.preventDefault();
     var _touch = e.originalEvent.changedTouches[0];
     endX = _touch.pageX,
     mlen = endX - startX;
     if(mlen > 0){
       // left();  todo:左滑处理
     }else if(mlen < 0 ){
       // right(); todo:右滑处理
     }
   })
获取url 参数
function getUrlParameter(name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.search);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
  }
parseQuery
var decode = decodeURIComponent;
function parseQuery (query) {
  var res = {};

  query = query.trim().replace(/^(\?|#|&)/, '');

  if (!query) {
    return res
  }

  query.split('&').forEach(function (param) {
    var parts = param.replace(/\+/g, ' ').split('=');
    var key = decode(parts.shift());
    var val = parts.length > 0
      ? decode(parts.join('='))
      : null;

    if (res[key] === undefined) {
      res[key] = val;
    } else if (Array.isArray(res[key])) {
      res[key].push(val);
    } else {
      res[key] = [res[key], val];
    }
  });

  return res
}
js 节流
function throttle(method) {
    if(method.tId) clearTimeout(method.tId);
    var args = Array.prototype.slice.apply(arguments);
    args.shift();
    method.tId = setTimeout(function(){
      method.apply({}, args);
    }, 400);
}
js 时间格式转换
export function dateFormate (long, fmt) {
  let date = new Date(long)
  var o = {
    "M+": date.getMonth()+1, //月份
    "d+": date.getDate(), //日
    "h+": date.getHours(), //小时
    "m+": date.getMinutes(), //分
    "s+": date.getSeconds(), //秒
    "q+": Math.floor((date.getMonth()+3)/3), //季度
    "S": date.getMilliseconds() //毫秒
  };

  if(/(y+)/.test(fmt)){
    fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
  }

  for(var k in o){
    if(new RegExp("("+ k +")").test(fmt))
    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  }

  return fmt;
}

// 使用
dateFormate(1465811871000, 'yyyy-MM-dd');
求对称数
/**
 * 求对称数
 * @param {*} limit 
 */
function symmetry(limit = 10000) {
  var result = [];

  for (let i = 1; i < 10; i++) {
    if (i * 11 <= limit) result.push(i * 11)

    for (let j = 0; j < 10; j++) {

      let k = 1

      let o = (i * Math.pow(10, k + 1) + i)
      let m = (Math.pow(10, k) * j)
      
      while (o + m < limit && k ++) {
        result.push(o + m)

        o = i * Math.pow(10, k + 1) + i
        m = m + Math.pow(10, k) * j
      }
    }
  }
  return result
}
// 上述代码输出结果:[ 11, 22, 33, 44, 55, 66, 77, 88 ]
根据value 找对象中的key
const findKey = function findKey(obj, value, pkey=null) {
  let hit = []

  Object.keys(obj).forEach(item => {
    const v = obj[item]
    const k = pkey ? `${pkey}.${item}` : item

    if(typeof v === 'string' || typeof v === 'number') {
      if(v === value) hit.push(k)
    } else if (v instanceof Array) {
      v.length && Array.prototype.forEach.call(v, (_i) => {
        if(_i === value) {
          hit.push(k)
        }
      })
    } else {
      hit = hit.concat(findKey(obj[item], value, k))
    }
  })

  return hit
}

const obj = { 'a': ['a1', 'a2', 'a3'], 'b': { 'bb': ['bb1', 'bb2'] } }
var result = findKey(obj, 'a1')  // [ 'a' ]
result = findKey(obj, 'bb1')     // [ 'b.bb' ]
树结构根据指定key 转换为树图
/**
  * 构造树图结构: return 指向父节点 child 指向首个子节点 sibling 指向兄弟
  * @param {*} tree
  * @returns 映射表
  */
generateTreeMap: function (tree, key) {
   if (!tree) return;
   const nodeArr = Array.isArray(tree) ? tree : [tree];
   const resultMap = {};
   function createNode (ret, child, sibling, node) {
     if (resultMap[node[key]]) return resultMap[node[key]];
     return { return: ret, child, sibling, node };
   }
   function reconcileChildren (children, pFiber) {
     if (!children) return;
     let preSibling;
     for (let i = 0; i < children.length; i++) {
       const child = children[i];
       const vFiber = createNode(pFiber, null, null, child);
       if (i === 0) {
         pFiber.child = vFiber;
         preSibling = vFiber;
       } else {
         const preFiber = createNode(pFiber, null, null, preSibling.node);
         preFiber.sibling = vFiber;
         preSibling = vFiber;
       }
       // 添加到resultMap
       resultMap[child[key]] = vFiber;
     }
     for (let i = 0; i < children.length; i++) {
       const child = children[i];
       const vFiber = createNode(pFiber, null, null, child);
       reconcileChildren(child.children, vFiber);
     }
   }
   // 创建根节点
   const rootNode = createNode(null, null, null, tree);
   // 根节点存入resultMap
   resultMap[tree[key]] = rootNode;

   reconcileChildren(nodeArr, rootNode);
   return resultMap;
 }

(未完,待续…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值