
16.05.2019, 21:56
|
|
Аспирант
|
|
Регистрация: 11.05.2019
Сообщений: 30
|
|
|
Диапазон как аргументы
// 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());
Вроде как не сложное задание. Но уже так плавит что ужс. Буду благодарен за литературу, или код...
|
|

16.05.2019, 21:57
|
|
Аспирант
|
|
Регистрация: 11.05.2019
Сообщений: 30
|
|
|
Еще дали совет что функцию которую возвращаю можно сделать стрелочной, но это для меня космос
|
|

16.05.2019, 23:12
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,155
|
|
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.
|
|

16.05.2019, 23:26
|
|
Аспирант
|
|
Регистрация: 11.05.2019
Сообщений: 30
|
|
|
Не совсем понимаю что за "а"? Это типа ...args? И куда в моем случае подставить
const makeRandomFn = (...a) => (a = [].concat(...a), () => a[Math.random() * a.length|0]);
Ибо выдает undefined.
|
|

16.05.2019, 23:27
|
|
Аспирант
|
|
Регистрация: 11.05.2019
Сообщений: 30
|
|
|
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
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,155
|
|
|
DarkPhoenix,
смотрите пост #3 снова
|
|

17.05.2019, 17:20
|
|
Интересующийся
|
|
Регистрация: 09.08.2017
Сообщений: 16
|
|
|
makeRandomFn = (...nums) => () => nums[Math.floor(Math.random()*nums.length)];
console.log(makeRandomFn(1,2,3)())
|
|

17.05.2019, 17:28
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,155
|
|
|
Stownheidg,
аргументом может быть и массив
|
|

19.05.2019, 04:44
|
|
Интересующийся
|
|
Регистрация: 09.08.2017
Сообщений: 16
|
|
|
makeRandomFn = (...nums) => () => (nums = nums.flat())[Math.floor(Math.random()*nums.length)];
console.log(makeRandomFn(1,2,3)());
console.log(makeRandomFn([1,2,3])());
|
|
|
|