Javascript 对象中的键值赋值,作为map的箭头函数中的参数传递

Javascript 对象中的键值赋值,作为map的箭头函数中的参数传递,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,在下面的代码中,我在map函数中传递一个对象数组。category的值被分配给categoryName,并作为categoryName返回。我的问题是理解作业。对对象属性的赋值不是这样发生的吗key:value?相反,我看到category的值以这种方式分配给这个新变量value:key const companies= [ {name: "Company One", category: "Finance"}, {name: "Company Two", category: "Retai

在下面的代码中,我在map函数中传递一个对象数组。
category
的值被分配给
categoryName
,并作为
categoryName
返回。我的问题是理解作业。对对象属性的赋值不是这样发生的吗
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 }))

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

a='Value'

log({a})
自从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);

{name,category:categoryName}
,尽管看起来像一个对象文字,但它不是一个。当在需要表达式的地方编写时,如
let x={name,category:categoryName}
,该语法创建了一个对象,但当在需要参数名的地方编写时,如
函数foo({name,category:categoryName}){}
和您的示例一样,它会分解一个对象

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

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}
在这里所做的。

你只是在解构时为
类别
创建一个别名。
{key:value}
在内部解构时的行为不同,
键:
是占位符,变量名是值。前几天我在看@getify视频,他说这可能会让人困惑,因为这就像是对象创建的反面。我的问题更多的是关于这一部分的
category:categoryName
。我看到categoryName被分配了category的值。这是怎么发生的?@PunyaslokaParida我添加了一个例子,让你更了解我的评论的意思。您可以看到更新