【问题标题】:Key value assignment in the object passed as a parameter in a arrow function for map [duplicate]在地图的箭头函数中作为参数传递的对象中的键值分配[重复]
【发布时间】:2019-02-11 12:02:41
【问题描述】:

在下面的代码中,我在 map 函数中传递了一个对象数组。 category 的值被分配给 categoryName 并返回为 categoryName。我的问题是理解赋值操作。 object properties 的分配不是以这种方式发生的key:value 吗?相反,我看到category 的值以这种方式分配给这个新变量value:key

const companies= [
  {name: "Company One", category: "Finance"},
  {name: "Company Two", category: "Retail"}
];
const companyu = companies.map(
({ name, category: categoryName }) => ({ name, categoryName }))

【问题讨论】:

  • 您只是在解构时为category 创建别名。
  • {key: value} 在使用内部解构时表现不同,key: 是占位符,变量名是值。前几天我在看@getify 视频,他说这可能会让人感到困惑,因为这与创建对象相反。

标签: javascript ecmascript-6 arrow-functions


【解决方案1】:

{ name, category: categoryName },尽管看起来完全像一个对象字面量,但它不是一个字面量。当写在期望表达式的位置时,例如let x = { name, category: categoryName };,该语法会创建一个对象,但是当写在期望参数名称的位置时,例如function foo({ name, category: categoryName }) {} 和您的示例,它会解构一个对象。

解构是一个完整的主题,您可以read 讨论,但要点是,您编写一个包含一些名称的模式而不是单个名称,并且该模式应用于给定值以设置所有模式的名字。所以,这个

const {a, b} = obj;

等价于这个

const a = obj.a;
const b = obj.b;

此外,如果你想使用与道具名称不同的变量名,你可以这样做

const {a, b: c} = obj;

相当于

const a = obj.a;
const c = obj.b;

这就是您的{ name, category: categoryName } 在这里所做的。

【讨论】:

    【解决方案2】:

    当您在对象{value} 中只给出一个值时,Key 属性将与变量名称相同(变量名称用作键的占位符

    let a = 'Value'
    console.log({a})

    如果您想定义不同的名称,您可以通过同时定义 KeyValue 来实现。

    let a = 'value'
    console.log({key: a})

    我的问题更多是针对此部分类别:categoryName。我懂了 该 categoryName 被分配了 category 的值。这是如何 发生了什么?

    let var1 = {a:1}
    let {a} = var1
    

    与 让 var1 = {a:1} 让 a = var1.a

    这个是

    let var1 = {a:1}
    let {a:b} = var1
    

    相同
    let var1 = {a:1}
    let b = var1.a
    

    【讨论】:

    • 我的问题更多是关于这部分category: categoryName。我看到 categoryName 被分配了类别的值。这是怎么发生的?
    • @PunyaslokaParida 我添加了一个示例,让您更了解我的评论的意思。你可以看到更新
    【解决方案3】:

    这是自 ES6(或 ES2015)开始提供的功能,称为速记表示法。

    如果你想定义一个对象,它的键与作为属性传入的变量同名,你可以使用简写并简单地传递键名

    在 ES5(旧语法)中,我们需要使用 key:value,如您所说。一个例子:

    var name = 'John';
    var surname = 'Matthew';
    var age = 45;
    
    var myObject = {
      name : name,
      surname : surname,
      age : age
    };
    
    console.log(myObject);
    

    在 ES6+(或 ES2015+)中,如果我们想将属性名称作为传入的变量,我们不需要使用 key:value。像这样:

    let name = 'John';
    let surname = 'Matthew';
    let age = 45;
    
    let myObject = {
      name,
      surname,
      age
    };
    
    console.log(myObject);
    

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2014-06-07
      • 2016-10-16
      • 1970-01-01
      • 2018-02-07
      • 2016-07-06
      • 1970-01-01
      • 2023-03-03
      • 2020-08-13
      相关资源
      最近更新 更多