我有一个执行此操作的功能
function example(senior) {
return {
manyotherProps: '123',
isSenior: senior ? senior : undefined
}
}
,但示例函数仍包含isSenior属性,尽管未定义。我可以进行多次返回,但是对象很大,我尽量避免重复。
答案 0 :(得分:3)
不太清楚为什么需要避免使用undefined属性,但是我尝试了这一点,并且对我有用:
选项1:如果前者为true,则插入
function exam(senior) {
var object = {
manyotherProps: "123"
};
if (senior) {
object.isSenior = senior;
}
return object;
}
选项2:如果前辈为假,则删除
function exam(senior) {
var object = {
manyotherProps: "123",
isSenior: senior
};
if (!senior) {
delete object.isSenior;
}
return object;
}
希望这会有所帮助。
答案 1 :(得分:0)
您可以使用三元运算符在{ isSenior }
对象和{}
对象之间交替,然后将结果散布到要返回的对象中:
function example(isSenior) {
return {
manyotherProps: '123',
...( isSenior ? { isSenior } : {} )
}
}
console.log(example('foo'));
console.log(example());
也就是说,虽然这是可能的,但我认为,如果需要的话,以后使用if
来分配给属性时,代码将更清晰易读:
function example(isSenior) {
const obj = {
manyotherProps: '123'
};
if (isSenior) obj.isSenior = isSenior;
return obj;
}
console.log(example('foo'));
console.log(example());
答案 2 :(得分:0)
我建议对象休息/传播语法
function example(senior) {
const result = {
manyotherProps: '123'
};
return isSenior
? {senior, ...result};
: result;
}
有时候,多次收益或突变实际上更为清晰,但如果只有少数条件,则上述方法是简洁明了的
答案 3 :(得分:0)
从性能的角度来看,函数返回的对象始终具有相同的形状(以相同的顺序初始化属性)是有益的。原因是modern JIT optimizations,例如hidden classes。不仅V8可以利用这一优势,所有流行的JS JIT引擎都使用类似的优化。
如您示例中的 Undefined / null
字段不行。它们是优选的。不要试图避免重复。避免相同类型的对象具有不同的形状和/或属性初始化顺序。
答案 4 :(得分:0)
当然,没有直接的方法可以实现,一种解决方案是手动删除不需要的属性。
function example(senior) {
let res = {
manyotherProps: '123',
isSenior: senior ? senior : undefined
}
Object.keys(res).forEach(t => res[t] === undefined && delete res[t]);
return res;
}