利用展开操作符简化对象上属性添加的操作
利用展开操作符简化对象上属性添加的操作
对象
经常情况下,需要根据条件动态向对象上添加属性,比如请求的参数。
const params = {prop1:'1'}
if(query){
params['prop2']= 2
}
通过展开操作符 spread(...
)可避免使用 if 从而简化操作。
考察如下的代码:
const prop1 = 1,
prop2 = "2";
const condition = false;
console.log({ a: prop1, b: prop2, ...(condition ? { prop3: "3" } : {}) });
// 结果 { a: 1, b: '2' }
其中空对象 {}
处可使用 null
,undefined
代替能够达到同样的效果。
借助逻辑运算符的短路特性可进一步简化:
const prop1 = 1,
prop2 = "2";
const condition = false;
console.log({ a: prop1, b: prop2, ...condition && { prop3: "3" }});
// 结果: { a: 1, b: '2' }
只有 condition
为 true
时才会将后面的对象展示,否则表达式返回 false,而 false 展示是没效果的。
特别地,被展开的字段就是所需要的名字时,进一步简化成:
const prop1 = 1,
prop2 = "2",
prop3=3;
const condition = true;
console.log({ prop1,prop2, ...condition && {prop3}});
// 结果: {prop1: 1, prop2: "2", prop3: 3}
数组
对于数组类似,只不过展示时需要用中括号包裹
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['falsy'] : [],
]
// 结果 ["foo", "bar"]