В приведенном ниже коде я передаю массив объектов в функцию карты. Значение 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 }))
{key: value} действует по-разному при использовании внутренней деструктуризации, key: является заполнителем, а имя переменной является значением. На днях я смотрел видео @getify, и он сказал, что это может сбивать с толку, потому что это похоже на противоположность созданию объекта.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда вы просто даете одно значение в объекте {value}, свойство Ключ будет таким же, как имя переменной (имя переменной работает как заполнитель для ключа)
let a = 'Value'
console.info({a})Если вы хотите определить другое имя, вы можете сделать это, определив как Ключ, так и Ценность.
let a = 'value'
console.info({key: a})My question was more for this portion category: categoryName. I see that categoryName is assigned the value of category. How does this happen?
let var1 = {a:1}
let {a} = var1
такой же, как пусть переменная1 = {а:1} пусть a = var1.a
А этот
let var1 = {a:1}
let {a:b} = var1
такой же, как
let var1 = {a:1}
let b = var1.a
Мой вопрос больше касался этой порции category: categoryName. Я вижу, что categoryName присвоено значение категории. Как это произошло?
@PunyaslokaParida я добавил пример, чтобы вы лучше поняли, что я имел в виду под своим комментарием. вы можете увидеть обновление
Это функция, доступная начиная с ES6 (или ES2015), называемая сокращенной нотацией.
Если вы хотите определить объект, ключи которого имеют то же имя, что и переменные, переданные в качестве свойств, вы можете использовать сокращение и просто передать имя ключа
В ES5 (старый синтаксис) нам нужно использовать ключ: значение, как вы сказали. Пример:
var name = 'John';
var surname = 'Matthew';
var age = 45;
var myObject = {
name : name,
surname : surname,
age : age
};
console.info(myObject);
В ES6+ (или ES2015+) нам не нужно использовать ключ: значение, если мы хотим сохранить имя атрибута в качестве передаваемой переменной. Нравится:
let name = 'John';
let surname = 'Matthew';
let age = 45;
let myObject = {
name,
surname,
age
};
console.info(myObject);
{ name, category: categoryName }, несмотря на то, что он выглядит в точности как литерал объекта, им не является. При записи там, где ожидается выражение, например let x = { name, category: categoryName };, этот синтаксис создает объект, но при записи там, где ожидается имя аргумента, например function 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 }.
Вы просто создаете псевдоним для
categoryпри деструктуризации.