• 本周学习总结


    数组扁平化

    let arr = [1, 2, 3, 1, [1, 2, [1, 2, 3, 4, [1, 2, 3]], 3, [2, 3, 4, 5]]];
    
    while (arr.some(val => Array.isArray(val))) {
      arr=[].concat(...arr)
    }
    

    把数字转换成中文

    const toChineseNum = num => {
      num += '';
      let len = num.length;
      let numStr = '零一二三四五六七八九十';
      let unitArr = ['', '十', '百', '千', '万'];
      let cha, unit;
      const getResult = str => {
        if (str.length > 5) {
          cha = str.length - 5;
          unit = unitArr.slice(1, cha + 1).reverse();
        }
        let res = Array.from({length: str.length}).reduce((acc, val, i) => {
          //大于5位的前面部分
          if (str.length > 5) {
            return acc.concat(numStr[str[i]] + (i < cha ? unit[i] : unitArr[str.length - 1 - i]));
          } else {
            return acc.concat(numStr[str[i]] + unitArr[str.length - 1 - i]);
          }
        }, '');
        return res.replace(/零[零十百千]+/g, '零').replace(/零+$/g, '').replace(/零万/g, '万')
      };
      if (len > 8) {
        return getResult(num.slice(0, len - 8)) + '亿' + getResult(num.slice(-8))
      }
      return getResult(num)
    };
    

    转换驼峰命名

    const toCamelCase=str=>str.replace(/[_-](w)/g,(all,val)=>{
    	return val.toUpperCase()
    });
    console.log(toCamelCase('new_dkg-kdk'));
    

    合并两个有序的数组

    const merge = (num1, num2, n = num1.length, m = num2.length) => {
      let len1 = n - 1;
      let len2 = m - 1;
      let len = n + m - 1;
      while (len1 >= 0 && len2 >= 0) {
        num1[len--] = num1[len1] > num2[len2] ? num1[len1--] : num2[len2--];
      }
      return num1;
    };
    

    分糖果(最大糖果的种类数)

    const distribut = arr => Math.min(new Set(arr).size, arr.length >> 1);
    

    递归=>动态规划

    // 递归
    const sum = n => {
      if (n == 1) {
        return 1
      }
      if (n == 2) {
        return 2
      }
      return sum(n - 1) + sum(n - 2)
    };
    // 动态规划
    const climb = n => {
      const dp = [];
      dp[0] = 1;
      dp[1] = 2;
      for (let i = 2; i < n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2]
      }
      return dp[n - 1]
    };
    console.log(climb(10));
    

    experss 打开mysql

    https://github.com/tgxhx/node-book-api
    
    mysql: {
        host: 'localhost',
        user: 'root',
        password: '123456',
        database: 'airchat',
        port: 3306,
      },
    

    视频播放网址

    https://github.com/xiugangzhang/video.github.io
    先导入video.sql,test.sql
    然后修改mysql的地址,就行了
    

    Symbol.unscopables

    用于指定对象值,其对象自身和继承的从关联对象的with环境绑定中排除的属性名称

    const object1 = {
      property1: 42
    };
    
    object1[Symbol.unscopables] = {
      property1: true
    };
    
    with (object1) {
      console.log(property1);
      // expected output: Error: property1 is not defined
    }
    
    Symbol.unscopables 属性的属性特性:
    writable false
    enumerable false
    configurable false

    Array.prototype[Symbol.unscopables]

    所有 ES2015 (ES6) 中新定义的、且并未被更早的 ECMAScript 标准收纳的属性名。这些属性被排除在由 with 语句绑定的环境中。

    with 绑定中未包含的数组默认属性有:

    重写fill方法

    转成数字
    const toInteger = x => isNaN(x = +x) ? 0 : x > 0 ? Math.floor(x) : Math.ceil(x);
    当初始化的值为负数,大于length,或者小数
    const toAbsolute = (index, len) => {
      let x = toInteger(index);
      return x < 0 ? Math.max(x + len, 0) : Math.min(x + len, len);
    };
    
    function fills(array, value, start, end) {
      let index = toAbsolute(start,array.length);
      let ends = end === undefined ? array.length : toInteger(end,array.length);
      console.log(index, ends);
      while (ends > index) array[index++] = value;
      return array
    }
    
    let arr = [1, 2, 3, 4, 5, 6];
    console.log(fills([1, 2, 3, 4], 2,-1));
    

    for循环的另一种写法

    let i=10;
    for (;i < 13; i++) {
      console.log(i);
    }
    

    一个函数实现map,filter,forEach,some,every,find,findIndex

    const createMethod = type => {
      let is_map = type == 1,
        is_filter = type == 2,
        is_some = type == 3,
        is_every = type == 4,
        is_find_index = type == 6,
        no_holes = type == 5 || is_find_index;
      return (array, fn) => {
        let value, result;
        let length = array.length;
        let create = (len) => Array.from({length: len});
        let target = is_map ? create(length) : is_filter ? create(0) : undefined;
        for (let i = 0; i < array.length; i++) {
          if (no_holes || i in array) {
            value = array[i];
            result = fn(value, i, array);
            if (type) {
              if (is_map) {
                target[i] = result;
              } else if (result) {
                switch (type) {
                  case 3:
                    return true;// some
                  case 5:
                    return value;//find
                  case 6:
                    return i;//findIndex
                  case 2:
                    target.push(value);//filter
                }
              } else if (is_every) {
                return false;//every
              }
            }
          }
        }
        return is_find_index ? -1 : is_some || is_every ? is_every : target;
      }
    };
    function iterations() {
      return ({
        forEach: createMethod(0),
        map: createMethod(1),
        filter: createMethod(2),
        some: createMethod(3),
        every: createMethod(4),
        find: createMethod(5),
        findIndex: createMethod(6)
      })
    }
    
    let map=iterations().map;
    // console.log(map([1, 2, 3, 4], val => val * 2));
    let filter=iterations().filter;
    // console.log(filter([1, 2, 3, 4, 5], (val, i) => i < 3));
    let some=iterations().some;
    // console.log(some([1, 2, 3, 4, 5], val => val > 3));
    let every=iterations().every;
    // console.log(every([1, 2, 3, 4, 5], val => val > 2));//false
    // console.log(every([1, 2, 3, 4, 5], val => val > 0));// true
    let find=iterations().find;
    console.log(find([1, 2, 3, 4, 5], val => val > 3));// 4
    let findIndex=iterations().findIndex;
    // console.log(findIndex([1, 2, 3, 4, 5], val => val > 4));
    let forEach=iterations().forEach;
    let arr = [1, 2, 3, 4, 5, 6];
    console.log(forEach(arr, (val,i) => arr[i]=1));// undefined
    console.log(arr);// [1,1,1,1,1,1]
    
  • 相关阅读:
    模拟电梯运行
    用户需求调研报告
    NABC需求分析
    大道至简---读书随笔3
    二维环形数组求最大子数组和
    结对开发之求最大数组溢出问题
    结对开发之环形数组
    结对开发之电梯调度
    我看“微软拼音”
    团队开发项目之典型用户和用户场景
  • 原文地址:https://www.cnblogs.com/fangdongdemao/p/12090391.html
Copyright © 2020-2023  润新知