Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.05.2019, 21:56
Интересующийся
Отправить личное сообщение для DarkPhoenix Посмотреть профиль Найти все сообщения от DarkPhoenix
 
Регистрация: 11.05.2019
Сообщений: 28

Диапазон как аргументы
// Task 2
// Написать функцию makeRandomFn которая принимает диапазон чисел и возвращяет функцию,
// которая при вызове возвращяет случайное число c этого диапазона.

// Task 3
// Нужно расширить функцию makeRandomFn, таким образом
// чтобы можно было передавать диапазон не только через масив, а как аргументы через запятую

makeRandomFn(1, 2, 100, 34, 45, 556, 33)
makeRandomFn([1, 2, 100, 34, 45, 556, 33])

Я сделал таск2. Но с третим возникли сложности.
Вот второй.

function makeRandomFn(getRandomNumber) {
return function() {
return getRandomNumber[Math.floor(Math.random() *getRandomNumber.length)];
}
}
const getRandomNumber = makeRandomFn([1, 2, 100, 34, 45, 556, 33])
console.log(getRandomNumber());
console.log(getRandomNumber());
console.log(getRandomNumber());


Вроде как не сложное задание. Но уже так плавит что ужс. Буду благодарен за литературу, или код...
Ответить с цитированием
  #2 (permalink)  
Старый 16.05.2019, 21:57
Интересующийся
Отправить личное сообщение для DarkPhoenix Посмотреть профиль Найти все сообщения от DarkPhoenix
 
Регистрация: 11.05.2019
Сообщений: 28

Еще дали совет что функцию которую возвращаю можно сделать стрелочной, но это для меня космос
Ответить с цитированием
  #3 (permalink)  
Старый 16.05.2019, 23:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,137

DarkPhoenix,
const makeRandomFn = (...a) => (a = [].concat(...a), () => a[Math.random() * a.length|0]);
const getRandomNumber = makeRandomFn([1, 2, 100, 34, 45, 556, 33])
console.log(getRandomNumber());
console.log(getRandomNumber());
console.log(getRandomNumber());

const makeRandomFn = (...a) => (a = [].concat(...a), () => a[Math.random() * a.length|0]);
const getRandomNumber = makeRandomFn(1, 2, 100, 34, 45, 556, 33)
console.log(getRandomNumber());
console.log(getRandomNumber());
console.log(getRandomNumber());

const makeRandomFn = function() {
const a = [].concat.apply([],arguments);
return function() {
    return a[Math.random() * a.length|0]
}};
const getRandomNumber = makeRandomFn(1, 2, 100, 34, 45, 556, 33)
console.log(getRandomNumber());
console.log(getRandomNumber());
console.log(getRandomNumber());

const makeRandomFn = function() {
const a = [].concat.apply([],arguments);
return function() {
    return a[Math.random() * a.length|0]
}};
const getRandomNumber = makeRandomFn([1, 2, 100, 34, 45, 556, 33])
console.log(getRandomNumber());
console.log(getRandomNumber());
console.log(getRandomNumber());

Последний раз редактировалось рони, 16.05.2019 в 23:30.
Ответить с цитированием
  #4 (permalink)  
Старый 16.05.2019, 23:26
Интересующийся
Отправить личное сообщение для DarkPhoenix Посмотреть профиль Найти все сообщения от DarkPhoenix
 
Регистрация: 11.05.2019
Сообщений: 28

Не совсем понимаю что за "а"? Это типа ...args? И куда в моем случае подставить
const makeRandomFn = (...a) => (a = [].concat(...a), () => a[Math.random() * a.length|0]);

Ибо выдает undefined.
Ответить с цитированием
  #5 (permalink)  
Старый 16.05.2019, 23:27
Интересующийся
Отправить личное сообщение для DarkPhoenix Посмотреть профиль Найти все сообщения от DarkPhoenix
 
Регистрация: 11.05.2019
Сообщений: 28

function makeRandomFn(getRandomNumber) {
return function(){
const makeRandomFn = (...args) => (args = [].concat(...args), () => args[Math.random() * args.length|0]);
}
}
const getRandomNumber = makeRandomFn([1, 2, 100, 34, 45, 556, 33]);
console.log(getRandomNumber());
console.log(getRandomNumber());
console.log(getRandomNumber());


Результат выдает undefined. Или я уже упаян?
Ответить с цитированием
  #6 (permalink)  
Старый 16.05.2019, 23:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,137

DarkPhoenix,
смотрите пост #3 снова
Ответить с цитированием
  #7 (permalink)  
Старый 17.05.2019, 17:20
Интересующийся
Отправить личное сообщение для Stownheidg Посмотреть профиль Найти все сообщения от Stownheidg
 
Регистрация: 09.08.2017
Сообщений: 13

makeRandomFn = (...nums) => () => nums[Math.floor(Math.random()*nums.length)];

console.log(makeRandomFn(1,2,3)())
Ответить с цитированием
  #8 (permalink)  
Старый 17.05.2019, 17:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,137

Stownheidg,
аргументом может быть и массив
Ответить с цитированием
  #9 (permalink)  
Старый 19.05.2019, 04:44
Интересующийся
Отправить личное сообщение для Stownheidg Посмотреть профиль Найти все сообщения от Stownheidg
 
Регистрация: 09.08.2017
Сообщений: 13

makeRandomFn = (...nums) => () => (nums = nums.flat())[Math.floor(Math.random()*nums.length)];

console.log(makeRandomFn(1,2,3)());
console.log(makeRandomFn([1,2,3])());
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 11:34
Как сделать такую страницу mortido Элементы интерфейса 11 02.10.2014 06:20
Мотоциклисты есть? l-liava-l Оффтопик 13 04.07.2014 12:35
Как сделать как в JQ? faforty Общие вопросы Javascript 8 13.11.2011 23:35