一些方法及Object方法特辑

1,三目的简便写法
(1)serviceInfo?.methodName serviceInfo中存在methodName吗
(2)serviceInfo?.parasTypes?.join(';') serviceInfo中parasTypes存在并转成字符串操作
注意2:恢复数组格式parasTypes: parasTypes.split(';').filter(v => v)
2,input输入框必填并格式是json

rules: [
                {
                  validator: async (rule, value, callback) => {
                    let out = value;
                    try {
                      out = JSON.parse(value);
                      if (typeof out !== 'object') {
                        callback(
                          '方法模板参数格式不正确,请根据方法入参有序使用 { 参数1: 参数值1, 参数2: 参数值2 格式的json数据',
                        );
                      }
                    } catch (e) {
                      callback(
                        '方法模板参数格式不正确,请根据方法入参有序使用 { 参数1: 参数值1, 参数2: 参数值2 }格式的json数据',
                      );
                    }
                    callback();
                  },
                },
              ],

3,判断至少输入一个查询条件的函数
params是查询条件的集合{a:'',b:'',c:''}

 const out = Object.assign(  
      {},  
      ...Object.entries(params)  
      .filter(([k, v]) => k && v)  
      .map(([k, v]) => ({ [k]: v })),  
 );  
 if (Object.keys(out).length < 1) {  
      message.warn('至少需要输入一个查询条件');  
      return;  
 }

5,Object的几个方法

(1)Object.assign()用法

 语法: Object.assign(target, …sources) target: 目标对象,sources: 源对象,将源对象(source)的所有可枚举属性,复制到目标对象(target)。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。
 注意:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
      如果只有一个参数,Object.assign会直接返回该参数。
      如果该参数不是对象,则会先转成对象,然后返回。但由于undefined和null无法转成对象,所以如果它们作为参数,就会报错。
 注意:如果非对象参数出现在源对象的位置(即非首参数),那么处理规则有所不同。首先,这些参数都会转成对象,如果无法转成对象,就会跳过。这意味着, 如果undefined和null不在首参数,就不会报错。其他类型的值(即数值、字符串和布尔值)不在首参数,也不会报错。但是,除了字符串会以数组形式,拷贝入目标对象,其他值都不会产生效果。
 其他:Object.assign只拷贝自身属性,不可枚举的属性(enumerable为false)和继承的属性不会被拷贝。
       对于嵌套的对象,Object.assign的处理方法是替换,而不是添加。
 用法可参考:https://blog.csdn.net/Calla_Lj/article/details/89478765
 **与$.extend()的用法相同,可能在兼容性上有区别**
 

(2)Object.entries()用法

  Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组
  ```
   var obj = { foo: 'bar', baz: 42 };
   console.log(Object.entries(obj));  //['foo':'bar','bar':42]
  ```
   如果原对象的属性名是一个 Symbol 值,该属性会被省略   
    `console.log(Object.entries({ [Symbol()]: 123, foo: 'abc' }));  // [ [ 'foo', 'abc' ] ]`
    

(2)Object.keys(obj)用法

    参数:要返回其枚举自身属性的对象
    返回值:一个表示给定对象的所有**可枚举属性的字符串数组**
    用法:1.  处理对象,返回可枚举的属性数组
        let person = {name:"张三",age:25,address:"深圳",getName:function(){}};
        console.log(Object.keys(person)); //['name','age','address','getName']
          2.   处理数组,返回索引值数组
          let arr = [1,2,3,4,5,6];
          console.log(Object.keys(arr));  //["0", "1", "2", "3", "4", "5"]
          3.   处理字符串,返回索引值数组
          let str = "ikun你好";
          console.log(Object.keys(str));  // ["0", "1", "2", "3", "4", "5"]
          4.    常用技巧
          let person = {name:"张三",age:25,address:"深圳",getName:function(){}};
         Object.keys(person).map((key)=>{
           console.log(person[key]);  // 张三,25,深圳,f (){}
          })

(3)Object.values()

  用法:1.  返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值
            let obj = {foo : "bar",baz : 20};
            console.log(Object.values(obj)); // ["bar", 20]
        2.  返回数组的成员顺序,与属性的遍历部分介绍的排列规则一致
            const obj = {100 : "a", 2 : "b", 7 : "c"};
            console.log(Object.values(obj));//["b", "c", "a"]
       注意:属性名为数值的属性,是按照数值大小,从小到大遍历的,因此返回的顺序是b、c、a。
       3.  Object.values()只会遍历对象自身的可遍历属性
           const obj = Object.create({},{p : {value : 10}});
           console.log(Object.values(obj)); //[]
           console.log(Object.getOwnPropertyDescriptors(obj));//{p{value:10,writable:false,enumerable:false,configurable:false}
      注意:Object.create方法的第二个参数添加的对象属性(属性p),如果不显式声明,默认是不可遍历的,因为p的属性描述对象的enumerable默认是false,Object.values不会返回这个属性。
          因此只要把enumerable改成true,Object.values就会返回属性p的值。
          const obj = Object.create({},{p:{value : 10,enumerable : true,configurable : true,writable : true,}})
         console.log(Object.values(obj));    //[10]
      4.  Object.values会过滤属性名为 Symbol 值的属性
         //如果Object.values方法的参数是一个字符串,会返回各个字符组成的一个数组。
          Object.values({ [Symbol()]: 123, foo: 'abc' });
          console.log(Object.values('foo'));  //["f", "o", "o"]
         注意:字符串会先转成一个类似数组的对象,字符串的每个字符,就是该对象的一个属性。因此,Object.values返回每个属性的键值,就是各个字符组成的一个数组
    5.   如果参数不是对象,Object.values会先将其转为对象
         console.log(Object.values(42));  // []
         console.log(Object.values(true));  // []
         console.log(Object.values(undefined));   //error
         console.log(Object.values(null));   //error
         注意:由于数值和布尔值的包装对象,都不会为实例添加非继承的属性,因此Object.values会返回空数组。

你可能感兴趣的:(javascript,前端,react.js)