функция, которая принимает массив и аргументы, разделенные запятыми, и возвращает функцию, которая возвращает любое число - PullRequest
1 голос
/ 01 августа 2020

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

function makeRandom(arg) {
    if(arg.constructor === Array) {
        return function() {
            return arg[Math.floor(Math.random() * arg.length)]
        }
    } else {
        return function() {
            let args = Array(arg);
            return args[Math.floor(Math.random() * args.length)]
        }
    }
};
const getRandomNumber = makeRandom([1, 2, 100, 34, 45, 556, 33])
console.log(getRandomNumber()) // 556
console.log(getRandomNumber()) // 100

const getRandomNumberTwo = makeRandom(1, 2, 100, 34, 45, 556, 33)
console.log(getRandomNumberTwo()) // undefined
console.log(getRandomNumberTwo()) // undefined

С массивом работает, но с аргументами выдает undefined

Ответы [ 2 ]

3 голосов
/ 01 августа 2020

Вы можете взять arguments функции, если массив не передан.

function makeRandom(arg) {
    if (arg.constructor !== Array) {
        arg = Array.from(arguments);
    }
    return function() {
        return arg[Math.floor(Math.random() * arg.length)];
    };
}
const getRandomNumber = makeRandom([1, 2, 100, 34, 45, 556, 33])
console.log(getRandomNumber()) // 556
console.log(getRandomNumber()) // 100

const getRandomNumberTwo = makeRandom(1, 2, 100, 34, 45, 556, 33)
console.log(getRandomNumberTwo());
console.log(getRandomNumberTwo());
2 голосов
/ 01 августа 2020

Используйте для этого оператор rest.

function makeRandom(...arg) {
    if(arg.constructor === Array) {
        return function() {
            return arg[Math.floor(Math.random() * arg.length)]
        }
    } else {
        return function() {
            let args = Array(arg);
            return args[Math.floor(Math.random() * args.length)]
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...