Назначение значения ключа в объекте, переданном в качестве параметра в стрелочной функции для карты

В приведенном ниже коде я передаю массив объектов в функцию карты. Значение 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 }))

Вы просто создаете псевдоним для category при деструктуризации.

maazadeeb 11.02.2019 13:06
{key: value} действует по-разному при использовании внутренней деструктуризации, key: является заполнителем, а имя переменной является значением. На днях я смотрел видео @getify, и он сказал, что это может сбивать с толку, потому что это похоже на противоположность созданию объекта.
jcubic 11.02.2019 13:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
880
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Когда вы просто даете одно значение в объекте {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 присвоено значение категории. Как это произошло?

2xJimmy 11.02.2019 13:25

@PunyaslokaParida я добавил пример, чтобы вы лучше поняли, что я имел в виду под своим комментарием. вы можете увидеть обновление

Code Maniac 11.02.2019 19:00

Это функция, доступная начиная с 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 }.

Другие вопросы по теме