传播带有对象的运算符

优素福·拉夫(Youssef Raf)

我试图在javascript中解决此问题:写一个函数,将对象作为包含个人信息属性的参数。提取firstName,lastName,size和weight(如果可用)。如果给定size或weight,则将值转换为字符串。将单位cm附加到尺寸上。将单位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` }),
};

}

有人可以向我解释(或让我参考我可以找到答案的地方)使用散布运算符的行,为什么在未定义重量或大小的值的情况下起作用?谢谢

TJ人群

那里发生了几件事:

  • 对象传播语法(不是运算符)使您可以“传播”值nullundefined当您这样做时,没有属性添加到正在创建的对象。(就像一样Object.assign,它忽略nullundefined在其参数列表中。)

  • &&操作者接受两个操作数,首先计算,并且如果该值是falsy,采用该值作为其结果; 它仅求值第二个操作数,并在第一个值为true时将其作为结果。

将这两件事放在一起,在对象文字中,该...(obj.size && { size: `${obj.size}cm` })部分的工作方式如下:如果obj.size为is undefined,则基本上...undefined它不会向该对象添加任何属性。但是,如果obj.size为真,则对第二个操作数{ size: `${obj.size}cm` }(对象文字)进行求值,得到一个对象,最后得到的...{ size: `${obj.size}cm` }结果是size向要创建的对象添加属性。

注意:如果obj.size0,则结果将没有任何size属性,因为它0是虚假的。因此,作者很可能会错误地放弃该解决方案sizeweight采用该解决方案:

function myFunction(obj) {
    return {
        fn: obj.fn,
        ln: obj.ln,
        ...(obj.size && { size: `${obj.size}cm` }),
        ...(obj.weight && { weight: `${obj.weight}kg` }),
    };
}

console.log(myFunction({fn: "fn", ln: "ln", size: 0}));

obj.size为is时0,您最终...0得到对象,该对象(从理论上讲Number)从基元创建一个对象(而不是基元),0然后扩展其属性。它不会在对象中放置任何属性,因为默认情况下,Number对象没有任何自己的可枚举属性。

现在,如果这个问题被定义为使得sizeweight永远0,很公平。但是在推广该解决方案之前,我会仔细考虑

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否有带有“横向”赋值运算符的语言?

来自分类Dev

(!!)带有整数溢出的运算符

来自分类Dev

C ++中的运算符重载带有整数和对象

来自分类Dev

在Knex查询中使用带有对象语法的运算符“ like”或“ greater than”

来自分类Dev

对象属性的传播运算符(...)等效于什么?

来自分类Dev

如何在react-redux中使用传播运算符修改索引处的特定对象?

来自分类Dev

转换对象以使用传播运算符?

来自分类Dev

Lodash克隆数组与传播运算符

来自分类Dev

对象数组上的传播运算符返回空数组

来自分类Dev

Clojurescript中的Javascript传播运算符?

来自分类Dev

在从函数返回的对象上使用ES6传播运算符

来自分类Dev

有关使用传播运算符“传播”对象作为参数的语法的问题

来自分类Dev

使用带有rvalue的条件运算符时,采用const pmr :: vector <>&不传播分配器

来自分类Dev

差值运算符中带有对象文字的Object.create差异

来自分类Dev

如何在Redux中使用传播运算符获取内部数组和对象的旧状态

来自分类Dev

(!!)带有溢出整数的运算符

来自分类Dev

Java 7中带有Guava Optional对象的条件运算符

来自分类Dev

没有新运算符的对象

来自分类Dev

在Knex查询中使用带有对象语法的运算符“ like”或“ greater than”

来自分类Dev

在Buffer对象上传播运算符

来自分类Dev

带有运算符重载的字典

来自分类Dev

带有 AND 运算符的 VBA If 语句

来自分类Dev

带有 ActiveRecord 对象的 Ruby 减号运算符

来自分类Dev

带有“OR”运算符的三元运算符不起作用?

来自分类Dev

JSX 传播运算符的使用

来自分类Dev

带有 javascript 对象的 Plus 运算符

来自分类Dev

如何使用传播运算符?

来自分类Dev

带有来自评估顺序或临时对象的预增量运算符的错误表达式?

来自分类Dev

间接运算符如何返回带有运算符重载的指针地址

Related 相关文章

  1. 1

    是否有带有“横向”赋值运算符的语言?

  2. 2

    (!!)带有整数溢出的运算符

  3. 3

    C ++中的运算符重载带有整数和对象

  4. 4

    在Knex查询中使用带有对象语法的运算符“ like”或“ greater than”

  5. 5

    对象属性的传播运算符(...)等效于什么?

  6. 6

    如何在react-redux中使用传播运算符修改索引处的特定对象?

  7. 7

    转换对象以使用传播运算符?

  8. 8

    Lodash克隆数组与传播运算符

  9. 9

    对象数组上的传播运算符返回空数组

  10. 10

    Clojurescript中的Javascript传播运算符?

  11. 11

    在从函数返回的对象上使用ES6传播运算符

  12. 12

    有关使用传播运算符“传播”对象作为参数的语法的问题

  13. 13

    使用带有rvalue的条件运算符时,采用const pmr :: vector <>&不传播分配器

  14. 14

    差值运算符中带有对象文字的Object.create差异

  15. 15

    如何在Redux中使用传播运算符获取内部数组和对象的旧状态

  16. 16

    (!!)带有溢出整数的运算符

  17. 17

    Java 7中带有Guava Optional对象的条件运算符

  18. 18

    没有新运算符的对象

  19. 19

    在Knex查询中使用带有对象语法的运算符“ like”或“ greater than”

  20. 20

    在Buffer对象上传播运算符

  21. 21

    带有运算符重载的字典

  22. 22

    带有 AND 运算符的 VBA If 语句

  23. 23

    带有 ActiveRecord 对象的 Ruby 减号运算符

  24. 24

    带有“OR”运算符的三元运算符不起作用?

  25. 25

    JSX 传播运算符的使用

  26. 26

    带有 javascript 对象的 Plus 运算符

  27. 27

    如何使用传播运算符?

  28. 28

    带有来自评估顺序或临时对象的预增量运算符的错误表达式?

  29. 29

    间接运算符如何返回带有运算符重载的指针地址

热门标签

归档