本周学习总结(原生)

toLocaleString

在特定的环境语言环境下的表示字符串
let numbers=3500
number.toLocaleString() //3,500
console.log(numbers.toLocaleString('en-US')) //3,500

RGBToHex

const RGBToHex=(r,g,b)=>((r<<16)+(g<<8)+b).toString(16).padStart(6,'0')
console.log(RGBToHex(255, 165, 1)) //ffa501

地图切换数据,遇到清除不了原数据的问题

 myChart.dispose();
//删除dom实例,然后重新绑定dom,然后再赋值新数据
myChart = echarts4.init(document.getElementById('yl-echarts'));
myChart.setOption(vm.option);

谷歌浏览器不能自动播放的问题

打开  chrome://flags/#touch-events-api      设置为 auto

位运算

判断一个整数 x 的奇偶性:x & 1 = 1 (奇数) , x & 1 = 0 (偶数)

求一个浮点数 x 的整数部分:~~x,对于正数相当于 floor(x) 对于负数相当于 ceil(-x)

计算 2 ^ n:1 << n 相当于 pow(2, n)

计算一个数 x 除以 2 的 n 倍:x >> n 相当于 ~~(x / pow(2, n))

判断一个数 x 是 2 的整数幂(即 x = 2 ^ n): x & (x - 1) = 0

多个函数执行

const pipeAsync = (...args) => arg => args.reduce((acc, val) => {
 return acc.then(val)
}, Promise.resolve(arg))

const sum = pipeAsync(
  x => x + 1,
  x => new Promise(resolve => setTimeout(() => resolve(x + 2), 1000)),
  x => x + 3,
  async x => (await x) + 4
);
(async ()=>{
  console.log(await sum(5))
})()

模板字符串

const a = n => [...`${n}`]
const b = n => [...String(n)];
console.log(a('abc'))
console.log(b('abc'))

判断是不是undefined和null

可以用来判断不等于undefined null
const isNil = x => x == null;

console.log(isNil(undefined)) //true
console.log(isNil(null))  //true
console.log(isNil(0)) //false
console.log(isNil([])) //false

动画开始停止

animation-play-state:
paused  //关
running //开

padStart

'8'.padStart(2,'0') //
//08

const addLeadingZeros = (number, targetLength) => {
  let start = number < 0 ? '-' : '';
  return start + Math.abs(number).toString()
    .padStart( targetLength,'0')
}

Date 时间

new Date()
// 年  月  日 时  分 秒  毫秒
new Date(2019,9,6,12,0,0,0)   //2019-10-06T04:00:00.000Z
//总毫秒数
new Date(1570334400000) //2019-10-06T04:00:00.000Z

时间排序

var result = [
  new Date(1995, 6, 2),
  new Date(1987, 1, 11),
  new Date(1989, 6, 10)
];
result.sort((a,b)=>a.getTime()-b.getTime())
console.log(result)

递归优化

动态规划是用已知项去更好的求解未知项

将原问题拆解若干子问题,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题的答案

f(n)=f(n-1)+f(n-2)

记忆化搜索递归(自顶向下)

原来的递归
let num = 0;    // 用来记录fib函数执行次数,执行一次加一
function fib(n) {
    num ++;
    if(n === 0) {
        return 0;
    }
    if(n === 1) {
        return 1;
    }
    return fib(n-1) + fib(n-2);
}

console.log(fib(7))
console.log(num)// 42

let memory = Array.from({length: 100}, v => -1)
const fib = n => {
    if (n == 0) {
        return 0
    }
    if (n == 1) {
        return 1
    }
    if (memory[n] == -1) {
        memory[n] = fib(n - 1) + fib(n - 2)
    }
    return memory[n]
}
console.log(fib(7)) //13   这个只有13次

迭代法(自下向上)

f(2)=f(1)+f(0), f(3)=f(2)+f(1)

const fib = n => {
    let memory = new Array(n)
    memory[0] = 0
    memory[1] = 1
    let i = 2
    while (i <= n) {
        memory[i] = memory[i - 1] + memory[i - 2]
        i++
    }
    return memory[n]
}
console.log(fib(7)) //13

CSS 技巧

选择器
nth-child   odd  even     n+6 从6开始后面的

https://juejin.im/post/5d4d0ec651882549594e7293

Date()

console.log(new Date().toISOString().split('T')[0])
// 2019-09-08
console.log(new Date().toTimeString().slice(0,8))
// 14:05:36

reduce 解构

console.log([{n: 4}, {n: 2}, {n: 8}, {n: 6}].reduce((acc, {n}) => acc + n, 0))
// 20

传入多个函数
const compose=(...args)=>args.reduce((acc,val)=>arg=>acc(val(arg)))
//从右到左
let a=compose(
    val=>val+5,
    val=>val*4,
    val=>val+10
)
console.log(a(5))

const composeRight=(...args)=>args.reduce((acc,val)=>arg=>val(acc(arg)))
//从左到右
let b=composeRight(
    val=>val+5,
    val=>val*4,
    val=>val+10
)
console.log(b(10))
posted @ 2019-09-08 17:19  猫神甜辣酱  阅读(272)  评论(0编辑  收藏  举报