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会返回空数组。