【发布时间】:2021-04-09 13:49:00
【问题描述】:
我试图在 javascript 中解决这个问题: 编写一个函数,将对象作为参数,其中包含带有个人信息的属性 . 提取名字、姓氏、大小和重量(如果有) .如果给定大小或重量,则将值转换为字符串 . 将单位厘米附加到尺寸 . 将单位 kg 附加到重量上 .返回一个包含我们感兴趣的所有可用属性的新对象 .所以我给出了这个解决方案:
function myFunction(obj) {
const {fn:fn , ln:ln ,size:s ,weight:w}= obj;
var newObj= {fn:fn , ln:ln};
if (s!==undefined && w!==undefined){
newObj={fn:fn , ln:ln ,size:s.toString()+'cm' ,weight:w.toString()+'kg'};
}
else if(s===undefined || w===undefined){
if (s===undefined && w!==undefined){
newObj={fn:fn , ln:ln ,weight:w.toString()+'kg'};
}
else if (s!==undefined && w===undefined) {
newObj={fn:fn , ln:ln ,size:s.toString()+'cm'};
}
}
return newObj
}
而作者的解决方案是:
function myFunction(obj) {
return {
fn: obj.fn,
ln: obj.ln,
...(obj.size && { size: `${obj.size}cm` }),
...(obj.weight && { weight: `${obj.weight}kg` }),
};
}
有人可以向我解释(或让我参考我在哪里可以找到答案)使用扩展运算符的行以及为什么当重量或大小的值未定义时它会起作用? 谢谢
【问题讨论】:
-
坦率地说,作者可能过于聪明,结果如果
size或weight是0,它就会被丢弃(输出中没有等效的属性)。
标签: javascript operator-keyword spread