zoukankan      html  css  js  c++  java
  • 【记录】前端实战

    0、数组和字符串相互转换

    字符串转数组:

    const array = str.split(',');    //关于split: 可以接收第二个参数,表示返回数组的最大长度

    数组转字符串:

    const str = array.toString();
    
    const str = array.join('=');       //可以指定连接符。如果省略参数,将使用逗号作为分隔符

     toString() 和 join()区别:

    const elements = ['Fire', 'Air', 'Water'];
    
    console.log(elements.join());         //默认用逗号隔开     
    // expected output: "Fire,Air,Water"
    
    console.log(elements.join(''));
    // expected output: "FireAirWater"
    
    console.log(elements.join('-'));
    // expected output: "Fire-Air-Water"

    每个对象都有一个 toString() 方法.

    let x;
    console.log(x.toString());             //Error: Cannot read property 'toString' of undefined

    var o = new Object();
    o.toString();                         // [object Object]

    1. 对数组调用map方法

    Array.prototype.map()的功能:对原数组中的每个元素调用指定的方法(不会修改原数组),将每个返回值组合成新的数组

    当时犯的傻:以为是对原数组进行修改,所以没有定义一个变量接收新的数组。

    规范写法:(引用自MDN文档

    const array1 = [1, 4, 9, 16];
    
    // pass a function to map
    const map1 = array1.map(x => x * 2);
    
    console.log(map1);
    // expected output: Array [2, 8, 18, 32]

    补充知识:不能用它来进行筛选,筛选的话要用filter()

    2. antd dataIndex 嵌套字段

    dataIndex 如果是嵌套的,需要用 String 数组 ['columns','id'] 而不是 columns.id


    比如你想要将后端返回的数据显示在table中,但是数据格式如下:

    result:{
      id:'001',   //可以直接取到
      columns:{
        columnId:'837542934',  //需要通过数组
        columnName:'address'
      }
    }

     那么在写代码的时候就要写成:

    const tableCol=[
      {
          title:'列ID',
          dataIndex:['columns','columnId'],
          render:(text)=>{<a onClick={()=>console.log(text)}></a>}    //这里的text就会对应columns中的columnId
      }
    ]

    数组形式是antd v4才提出的,参考antd官方文档:https://ant.design/docs/react/migration-v4-cn#%E7%BB%84%E4%BB%B6%E9%87%8D%E6%9E%84

    3. antd 中,Select 组件如何取到 label 的值

    设置 labelInValue:(当然也要写 keyValue 和 labelValue)

    <Select keyValue='id' labelValue='name' data={dataSource} labelInValue />

    设置了这个属性之后,在设置初值的时候就要写成 {key: record.id, label:record.name}

    const [form] = Form.useForm();
    const {setFieldsValue} = from;

    useEffect(()=>{
    const {id,name}= record; setFieldsValue({
    selectData: {key: id, label:name}
    }); },[]);

    4. Object.keys()怎么用

    Object.keys()返回对象自身的(可枚举)属性构成的数组。

    补充:for in也可以遍历对象上的属性,不同的是它还会遍历原型链上的属性

    4.1 判断对象是否为空:

    const a={key:'1'};
    const doSomething=(a)=>{
    const arr = Object.keys(a);
    if(arr.length>0){
    console.log('对象不为空');
    }
    };

    4.2 处理数组,返回索引值数组

    const s = [111,222,333,444,555,666];
    console.log(Object.keys(s));          //[ '0', '1', '2', '3', '4', '5' ]

    4.3 遍历对象,取到每个属性的值

    const obj = {id:'001', name:'Emma', age:'19', address:'britain'};
    
    Object.keys(obj).map(item=>{
      console.log(item, obj[item])
    });


    打印出来的结果:
    //id 001
    //name Emma
    //age 19
    //address britain

     4.4 判断是否是对象的自身属性

    let obj={name:'jack'} ;
    
    console.log(obj.hasOwnProperty('name'));   //true

    补充:Object.values(),它的返回值:

    一个包含对象自身的所有可枚举属性值的数组。

    5. null ,undefined 和 NaN

    null的定义:  a null value represents a reference that points to a nonexistent or invalid object or address.
    typeof null === 'object' // true
    undefined: 当你声明一个变量但没有声明它的值时,JavaScript会给它赋值undefined
    NaN:表示一个不是数字的东西,尽管它实际上是一个数字。  //typeof NaN ->  number
    NaN 与任何值包括其自身)相比得到的结果均是 false.
    所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符,要用 isNaN(result)

    6. indexOf()

    indexOf() 方法可返回某个指定的字符串值在字符串首次出现的位置。

    对大小写敏感。

    如果要检索的字符串值没有出现,则该方法返回 -1。


    stringObject.indexOf(searchvalue,fromindex)

    //fromindex: 规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1

    7.toLocalString()

    可以将数字变成千分位格式:

    var number = 3500;
    
    console.log(number.toLocaleString());     //3,500

    把Date对象转化成字符串:

    var date = new Date();   

    var
    str=d.toLocaleString(); console.log(str);
    VM224:
    1 2020/9/28 上午9:53:29

     8. margin padding 分别带不同个数的参数

    margin: 20px 40px;       //(上、下20px;左、右40px。)
    margin: 20px 40px 60px;         //(上20px;左、右40px;下60px。)
    margin: 20px 40px 60px 80px;      //(上20px;右40px;下60px;左80px。)

    9. 将变量作为key取出对象的属性值

    场景:从对象中找到某个变量对应的值

    const obj={title:'book 1'};

    const myFunc=(val)=>{
      // let result = obj.val;   //不能这样写,js会去取obj的val属性,结果是undefined
      let result = obj[val];     //正确,打印结果:"book 1"
      console.log(result)
    };

    myFunc('title');

    10. Math.max() 的用法

    MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/max

    //注意参数格式。之前我以为是传个数组进去就行了,结果返回的是NaN
    
    console.log(Math.max(1, 3, 2));
    // expected output: 3
    
    console.log(Math.max(-1, -3, -2));
    // expected output: -1
    
    const array1 = [1, 3, 2];
    
    console.log(Math.max(...array1));
    // expected output: 3

    11.使用filter()和indexOf()去掉数组中的重复数据

    const func = (val)=>{
      if(typeof val === 'string')
       {arr = val.split('');} 
      else{ arr = val}
      const result = arr.filter(
        (item,index)=>{
          return arr.indexOf(item)===index;          //过滤条件:当前的位置就是第一次出现的位置
        });
      return result;
    }
    
    console.log(func('AAAAAWWWREFSSSS'))             //> Array ["A", "W", "R", "E", "F", "S"]

    12.选出数组中那个“与众不同”的元素

    题目来源:https://www.codewars.com/kata/585d7d5adb20cf33cb000235/train/javascript 

    There is an array with some numbers. All numbers are equal except for one. Try to find it!

    findUniq([ 1, 1, 1, 2, 1, 1 ]) === 2
    findUniq([ 0, 0, 0.55, 0, 0 ]) === 0.55

    我的答案:

    function findUniq(arr) {
      let newArr=arr.filter((item)=>{
        return arr.indexOf(item)!==0;    如果unique number是arr[0],数组长度是arr.length-1,如果不是,数组长度为1
      });
      if(newArr.length>1){
        return arr[0];}          如果数组长度大于1,就说明原数组第一个数就是unique number
      else{
        return newArr[0];
      }
    };

    其他人的解答:

    function findUniq(arr) {
      return arr.find(n => arr.indexOf(n) === arr.lastIndexOf(n));
    }

    lastIndexOf()

    引用:https://www.w3school.com.cn/jsref/jsref_lastIndexOf.asp

    lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置

    lastIndexOf() 方法对大小写敏感

    如果要检索的字符串值没有出现,则该方法返回 -1

    stringObject.lastIndexOf(searchvalue,fromindex)        
    //fromindex:规定在字符串中开始检索的位置。如省略该参数,则将从字符串的最后一个字符处开始检索

    补充:indexOf() 方法可返回某个指定的字符串值在字符串首次出现的位置

    13.进制转换

    Number.toString(radix)

    var count = 10;
    
    console.log(count.toString());    // 输出 '10'
    console.log((17).toString());     // 输出 '17'
    console.log((17.2).toString());   // 输出 '17.2'
    
    var x = 6;
    
    console.log(x.toString(2));       // 输出 '110'
    console.log((254).toString(16));  // 输出 'fe'
    
    console.log((-10).toString(2));   // 输出 '-1010'
    console.log((-0xff).toString(2)); // 输出 '-11111111'

    parseInt(stringradix)   

    引用:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt

    解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。

    参数

    string
    要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用  ToString 抽象操作)。字符串开头的空白符将会被忽略。
    radix 可选
    从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。请注意,10不是默认值!

    14.填充字符串,使其达到目标长度:padStart() padEnd()

    引用:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

    padStart()

    str.padStart(targetLength [, padString])
    const str1 = '5';
    
    console.log(str1.padStart(2, '0'));
    // expected output: "05"
    
    const fullNumber = '2034399002125581';
    const last4Digits = fullNumber.slice(-4);
    const maskedNumber = last4Digits.padStart(fullNumber.length, '*');
    
    console.log(maskedNumber);
    // expected output: "************5581"

    padEnd()

    str.padEnd(targetLength [, padString])
    const str1 = 'Breaded Mushrooms';
    
    console.log(str1.padEnd(25, '.'));
    // expected output: "Breaded Mushrooms........"
    
    const str2 = '200';
    
    console.log(str2.padEnd(5));
    // expected output: "200  "

    实战:

    RGB To Hex Conversion

    题目来源:https://www.codewars.com/kata/513e08acc600c94f01000001/train/javascript

    The rgb function is incomplete. Complete it so that passing in RGB decimal values will result in a hexadecimal representation being returned. Valid decimal values for RGB are 0 - 255. Any values that fall out of that range must be rounded to the closest valid value.

    Note: Your answer should always be 6 characters long, the shorthand with 3 will not work here.

    The following are examples of expected output values:

    rgb(255, 255, 255) // returns FFFFFF
    rgb(255, 255, 300) // returns FFFFFF
    rgb(0,0,0) // returns 000000
    rgb(148, 0, 211) // returns 9400D3

    我的答案:

    function rgb(r, g, b){
      const arr  = Object.values(arguments);
      const result = arr.map((item)=>{
        if(item<0)return '00';
        if(item>255)return 'FF';
        return item.toString(16).toUpperCase().padStart(2,'0'); 
      });  
      
      return result.join('');
    }

    TO BE CONTINUED

  • 相关阅读:
    记处理PostgreSQL连接太多的问题
    记服务器迁移上云出现故障
    PostgreSQL-迁移同步序列
    为什么你的pgbouncer连接这么慢
    TS基础知识储备
    前端实在好用的工具类库 【后续持续添加若有请留言添加积累供大家使用】
    Vue 3 + Typescript + Vite2.0 搭建移动端 代码规范以及注意的点
    flutter2.0 环境搭建(window环境下Mac自行查看官网即可)
    vite2.0+vue3+ts前端最新热门技术项目搭建
    React官方状态管理库—— Recoil
  • 原文地址:https://www.cnblogs.com/hikki-station/p/13685188.html
Copyright © 2011-2022 走看看