Nano Hash - криптовалюты, майнинг, программирование

Почему роль скобок в этом синтаксисе .reduce(), который создает объект JavaScript?

В следующем коде показаны три варианта использования JavaScript .reduce():

  1. сложить сумму
  2. построить массив
  3. создать объект JavaScript

Как понять добавленные круглые скобки вокруг фигурных скобок в третьем примере? Являются ли они просто для того, чтобы фигурные скобки объекта не интерпретировались как фигурные скобки функции? Или у них другая цель?

Есть ли другой способ написать третий пример, чтобы этот синтаксис был более явным, например. можно ли как-то создать объект JavaScript внутри многострочной функции?

const languages = ['french', 'french', 'spanish', 'polish', 'spanish', 'german', 'spanish', 'polish', 'spanish', 'spanish', 'french', 'spanish', 'english', 'french', 'spanish', 'english', 'french', 'english'];

// 1. iterating while adding a sum
const sum = languages.reduce((acc, language) => {
    acc++;
    return acc;
}, 0);
console.log(`There are ${sum} entries.`);

// 2. iterating while building an array
const initials = languages.reduce((acc, language) => {
    acc.push(language.substring(0, 1));
    return acc;
}, []);
console.log(initials);

// 3. iterating while building a JavaScript object
const totals = languages.reduce((acc, language) => ({
    ...acc,
    [language]: acc[language] ? acc[language] + 1 : 1
}), {});
console.log(totals);

  • Это синтаксис функции стрелки для возврата объекта. 25.06.2020
  • Чтобы скобки не интерпретировались как блок кода, а не литерал объекта. 25.06.2020

Ответы:


1

Да, они там, чтобы скобки не читались как функциональные скобки, потому что:

.reduce((acc,language) => acc)

Без фигурных скобок функция стрелки вернет то, что находится справа. Это эквивалентно этому здесь:

.reduce((acc,language) => { return acc })

Если вы хотите вернуть объект {}, вы не можете просто использовать фигурные скобки, они будут интерпретироваться как функциональные скобки, поэтому вам нужно будет заключить их в круглые скобки.

.reduce((acc,language) => ({...acc})

И это эквивалентно:

.reduce((acc,langauge) => {
   return {...acc};
})
25.06.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..