Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Диапазон как аргументы (https://javascript.ru/forum/misc/77532-diapazon-kak-argumenty.html)

DarkPhoenix 16.05.2019 21:56

Диапазон как аргументы
 
// 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());


Вроде как не сложное задание. Но уже так плавит что ужс. Буду благодарен за литературу, или код...

DarkPhoenix 16.05.2019 21:57

Еще дали совет что функцию которую возвращаю можно сделать стрелочной, но это для меня космос

рони 16.05.2019 23:12

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());

DarkPhoenix 16.05.2019 23:26

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

Ибо выдает undefined.

DarkPhoenix 16.05.2019 23:27

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. Или я уже упаян?

рони 16.05.2019 23:34

DarkPhoenix,
смотрите пост #3 снова

Stownheidg 17.05.2019 17:20

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

console.log(makeRandomFn(1,2,3)())

рони 17.05.2019 17:28

Stownheidg,
аргументом может быть и массив

Stownheidg 19.05.2019 04:44

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

console.log(makeRandomFn(1,2,3)());
console.log(makeRandomFn([1,2,3])());


Часовой пояс GMT +3, время: 17:14.