Использование оператора Map + Rest (JavaScript)

Эта функция делает то, что я хотел, но не то, что я ожидал. Я ожидал, что он создаст два массива, поскольку ...args создает массив переданных аргументов, а map() что-то делает с каждым значением массива, к которому он подключен, и сохраняет результаты в новом массиве. Может кто-нибудь сказать мне, почему эта функция не создает два массива?

let practiceFunc = (...args) => {
 let arr = args.map((e) => {
  return e + 1
 })
  
 return arr ;
} 

console.info(practiceFunc(1,2,3)) ;
document.write(practiceFunc(1,2,3)) ;

Добро пожаловать в СО! Что вы подразумеваете под «не создает два массива». Какой именно результат вы ожидали?

ggorlen 21.04.2019 22:37

@ggorlen я ожидал массив с числами 1 2 3 в качестве элементов, а затем массив, созданный массивом карт, содержащим элементы 2 3 4

iamlearningtocode 21.04.2019 22:55
args — это массив [1,2,3], а arr — массив [2,3,4]. Оба создаются, и возвращается только arr.
ggorlen 21.04.2019 22:56

@ggorlen да, спасибо, Джек помог мне понять это, и ты только что укрепил это в моем мозгу.

iamlearningtocode 21.04.2019 23:01
Поведение ключевого слова "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) для оценки ваших знаний,...
2
4
533
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он создает два массива, но вы используете только один — arr, массив, возвращаемый функцией. args также используется, но так же, как и массив, используемый в map - вы можете легко опустить его и использовать arguments (однако для этого требуется функция ES5, поскольку стрелочные функции не имеют своего orwn arguments, и вам придется извлечь значения с использованием Object.values):

let practiceFunc = function() {
  let arr = Object.values(arguments).map((e) => {
    return e + 1
  });
  return arr;
}

console.info(practiceFunc(1, 2, 3));
document.write(practiceFunc(1, 2, 3));

о да, вы правы, вот как функция может использовать метод map(). Я узнал об этом в разделе es6 на freeCodeCamp. Вы уверены, что мне нужна функция es5?

iamlearningtocode 21.04.2019 22:46

@iamlearningtocode Это привилегия, которая разблокируется с 15 репутацией, так что продолжайте задавать хорошие вопросы, и вы разблокируете привилегию в кратчайшие сроки.

Jack Bashford 21.04.2019 22:49

Я не хотел проявить к вам неуважение, когда спросил, уверены ли вы в необходимости функции es5. на самом деле вы правы: «Функции стрелок не имеют собственных аргументов, привязывающихся к их области действия; при их вызове не создается объект аргументов».

iamlearningtocode 21.04.2019 23:00

@iamlearningtocode — это нормально — спрашивать — лучшая форма обучения.

Jack Bashford 21.04.2019 23:01

"вы можете легко опустить его и использовать arguments" - это не имеет смысла. В синтаксисе остальных параметров нет ничего плохого, объект arguments не в моде по какой-то причине. И вы должны использовать Array.from() (что соблюдает порядок) вместо Object.values(). Но это все равно бесполезно - оба они также создают временный массив, так что здесь ничего не выиграно.

Bergi 21.04.2019 23:51

но имеет ли это значение @Bergi => «Функции стрелок не имеют собственной привязки аргументов в своей области; при их вызове объект аргументов не создается».

iamlearningtocode 22.04.2019 04:11

@iamlearningtocode Учитывая, что вам, вероятно, не следует использовать arguments, это не имеет значения

Bergi 22.04.2019 14:25

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