在下面的代码中,我在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 }))
答案 0 :(得分:1)
当您仅在对象{value}
中提供一个值时,键属性将与变量名称相同(变量名称用作键的占位符)
let a = 'Value'
console.log({a})
如果要定义其他名称,可以通过定义键和值来实现。
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
答案 1 :(得分: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 :(得分:0)
此功能自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);