15 KiB
title | localeTitle |
---|---|
Arguments Optional | Аргументы Дополнительно |
Не забудьте использовать Read-Search-Ask
если вы застряли. Попробуйте подключить программу и напишите свой собственный код
Проблема Объяснение:
Может быть довольно сложно понять, что нужно сделать. Всегда есть много способов сделать что-то при кодировании, но независимо от используемого алгоритма нам нужно создать программу, которая выполняет следующие действия:
- Он должен добавить два числа, переданные в качестве параметров, и вернуть сумму.
- Он должен проверить, являются ли какие-либо цифры действительными числами, иначе возвратите undefined и остановите программу прямо там.
- Он должен проверить, прошел ли он один или два аргумента. Больше игнорируются.
- Если у него есть только один аргумент, он должен вернуть функцию, которая использует это число, и ожидает другого, а затем добавить его.
Связанные ссылки
Подсказка: 1
Каждый раз, когда вы имеете дело с аргументом, вы должны проверить, является ли это числом или нет. Для этого функция, которая обрабатывает эту задачу, сохранит повторяющийся код.
попытаться решить проблему сейчас
Подсказка: 2
При работе над случаем, когда ему нужно вернуть функцию, целесообразно проверить, является ли первый и единственный аргумент числом снова и основывается на этом коде.
попытаться решить проблему сейчас
Подсказка: 3
В случае, когда передан только один аргумент, не беспокойтесь о том, как запросить ввод для второго, просто определите определение функции правильно, и все будет работать так, как должно.
попытаться решить проблему сейчас
Осторожно, спойлеры!
Решение впереди!
Решение базового кода:
function addTogether() {
// Function to check if a number is actually a number
// and return undefined otherwise.
var checkNum = function(num) {
if (typeof num !== 'number') {
return undefined;
} else
return num;
};
// Check if we have two parameters, check if they are numbers
// handle the case where one is not
// returns the addition.
if (arguments.length > 1) {
var a = checkNum(arguments[0]);
var b = checkNum(arguments[1]);
if (a === undefined || b === undefined) {
return undefined;
} else {
return a + b;
}
} else {
// If only one parameter was found, returns a new function that expects two
// Store first argument before entering the new function scope
var c = arguments[0];
// Check the number again, must be outside the function to about returning an object
// instead of undefined.
if (checkNum(c)) {
// Return function that expect a second argument.
return function(arg2) {
// Check for non-numbers
if (c === undefined || checkNum(arg2) === undefined) {
return undefined;
} else {
// if numbers then add them.
return c + arg2;
}
};
}
}
}
// test here
addTogether(2,3);
Код Объяснение:
- Во-первых, я создаю функцию с единственной целью проверить, действительно ли число является числом и возвращает неопределенный, если это не так. Он использует typeof для проверки.
- Проверьте, есть ли у нас два параметра, если да, то проверьте, являются ли они числами или нет, с помощью функции checkNum, которую я создал.
- Если они не определены, добавьте их и верните добавление. Если они какие-либо из них не определены, то возвратите undefined.
- В случае, когда у нас есть только один аргумент, мы возвращаем новую функцию, которая ожидает два параметра. Для этого мы сохраняем первый аргумент, прежде чем переходить в новую область, чтобы не перезаписывать наши аргументы.
- Все еще внутри большого остального, нам нужно проверить аргумент, который мы сохранили, если это число, то мы возвращаем функцию, ожидающую второй аргумент.
- Теперь внутри возвращаемой функции мы должны снова проверить нечетные числа так же, как в начале, используя checkNum, если undefined, а затем возвращаем это, в противном случае, если числа добавят их и вернут добавление.
Связанные ссылки
Решение промежуточного кода:
function addTogether() {
var args = new Array(arguments.length);
//Storing the arguments in an array
for(var i = 0; i < args.length; ++i) {
args[i] = arguments[i];
}
//Check for the arguments length
if(args.length == 2){
//If there are two arguments,check for the type of both arguments
//Use typeof to check the type of the argument(both should be numbers)
if(typeof args[0] !== 'number' || typeof args[1] !=='number' ){
return undefined;
}
return args[0]+args[1];
}
//When only one argument is provided
if(args.length == 1){
a= args[0];
//Check the argument using typeof
if(typeof a!=='number'){
return undefined;
}
else{
//Making use of closures
return function(b){
//Checking the second argument
if(typeof b !=='number'){
return undefined;
}
else
return a+b;
};
}
}
}
// test here
addTogether(2,3);
Код Объяснение:
- Сначала сохраните аргументы в массиве, создав массив, используя метод constructor.
- Добавляет каждый аргумент в новый массив.
- Затем проверьте длину нового массива, как нам нужно знать, достаточно ли у нас или нет.
- Проверьте тип аргументов с помощью
typeof
поскольку оба они должны быть числами. - Возвращает undefined, если какой-либо из них не является числом или возвращает их сумму, если они есть.
- Если был только один аргумент, мы по-прежнему проверяем тип после сохранения его в новой переменной и возвращаем новую функцию или неопределенную.
Связанные ссылки
Расширенное решение для кода:
//jshint esversion: 6
function addTogether() {
var args = Array.from(arguments);
return args.some(n => typeof n !== 'number') ?
undefined:
args.length > 1 ?
args.reduce((acc, n) => acc += n, 0):
(n) => typeof n === "number" ?
n + args[0]:
undefined;
}
// test here
addTogether(2,3);
Код Объяснение:
- Сначала я повторяю аргументы и проверяю аргументы, которые не являются числом, и возвращают неопределенные
- Если это не я, то проверьте, если длина аргументов выше 1, если я суммирую аргументы, используя Array.prototype.reduce
- Else Я возвращаю функцию, которая проверяет, является ли переданный аргумент числом и суммирует его, если не возвращает неопределенный
Связанные ссылки
ПРИМЕЧАНИЕ. Пожалуйста, добавьте свое имя пользователя, только если вы добавили какое-либо соответствующее основное содержимое на страницу вики. (Пожалуйста, не удаляйте существующие имена пользователей.)
ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
- НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
- Добавьте объяснение своего решения.
- Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced .
- Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( НЕ удаляйте существующие имена пользователей )
Видеть
Wiki Challenge Solution Template
дляWiki Challenge Solution Template
для справки.