#javascript
Вопрос:
Я выполняю простые вопросы с кодом, в которых мы добавляем единицу к числу, цифры которого хранятся в массиве. Моя логика работает хорошо, но возвращаемое значение не определено. Консоль дает правильный ответ. Почему? И как мне это исправить?
var plusOne = function(digits) {
addNumber(digits.length - 1, 1, digits)
function addNumber(index, value, digitsArr) {
let sum = digitsArr[index] value
if(sum > 9) {
let onesDigit = parseInt(sum.toString().charAt(1))
digitsArr[index] = onesDigit
let twosDigit = parseInt(sum.toString().charAt(0))
addNumber(index-1, twosDigit, digitsArr)
} else {
digitsArr[index] = sum
console.log(digitsArr)
return digitsArr
}
}
};
console.log(plusOne([1,2,9]))
Комментарии:
1.
plusOne
ничего не возвращает. Попробуйreturn addNumber(...):
2. Попробовал использовать параметры по умолчанию, но не сработало.
Ответ №1:
1) return
значение функции addNumber
, если вы не вернете что-то из функции, то JS вернет undefined
неявно
return addNumber(digits.length - 1, 1, digits);
2) В каждом случае вы должны возвращать значение из addNumber
функции. Есть одна из двух вещей, которые вы могли бы сделать
return digitsArr
от функцииaddNumber
, а не только отelse
части.- возвращение
addNumber(index - 1, twosDigit, digitsArr);
из тогоif
и возвращениеdigitsArr
из тогоelse
.
Основная часть состоит в том, чтобы вернуть что-то из функции, что полностью зависит от того, что именно вы хотите сделать со своим кодом.
var plusOne = function(digits) {
return addNumber(digits.length - 1, 1, digits);
function addNumber(index, value, digitsArr) {
let sum = digitsArr[index] value;
if (sum > 9) {
let onesDigit = parseInt(sum.toString().charAt(1));
digitsArr[index] = onesDigit;
let twosDigit = parseInt(sum.toString().charAt(0));
addNumber(index - 1, twosDigit, digitsArr);
} else {
digitsArr[index] = sum;
}
return digitsArr;
}
};
console.log(plusOne([1, 2, 9]));
Ответ №2:
PlusOne ничего не возвращает, ни addNumber(индекс-1, двузначный, цифровой)
пробовать:
var plusOne = function(digits) {
return addNumber(digits.length - 1, 1, digits)
function addNumber(index, value, digitsArr) {
let sum = digitsArr[index] value
if(sum > 9) {
let onesDigit = parseInt(sum.toString().charAt(1))
digitsArr[index] = onesDigit
let twosDigit = parseInt(sum.toString().charAt(0))
return addNumber(index-1, twosDigit, digitsArr)
} else {
digitsArr[index] = sum
console.log(digitsArr)
return digitsArr
}
}
};
console.log(plusOne([1,2,9]))
Ответ №3:
Вы вызываете функцию plusOne
, которая inturn вызывает внутреннюю функцию addNumber
. Это не возвращает никакого значения. Поэтому вместо того, чтобы просто звонить addNumber(digits.length - 1, 1, digits)
, вы должны возвращать это значение, например return addNumber(digits.length - 1, 1, digits)
. Потому что ваша родительская функция-это ожидание результата выполнения. Так что вам придется дополнить его return
заявлением.
Также внутри addNumber
функции, когда сумма больше 9, чем при вызове addNumber(index - 1, twosDigit, digitsArr)
, вы должны вернуть результат этого выполнения return addNumber(index - 1, twosDigit, digitsArr)
. Как и в предыдущем случае, здесь также его исполнитель ожидает ответа от функции.
var plusOne = function (digits) {
return addNumber(digits.length - 1, 1, digits);
function addNumber(index, value, digitsArr) {
let sum = digitsArr[index] value;
if (sum > 9) {
let onesDigit = parseInt(sum.toString().charAt(1));
digitsArr[index] = onesDigit;
let twosDigit = parseInt(sum.toString().charAt(0));
return addNumber(index - 1, twosDigit, digitsArr);
} else {
digitsArr[index] = sum;
return digitsArr;
}
}
};
console.log(plusOne([1, 2, 9]));
Ответ №4:
В javascript функция, в которой отсутствует явный оператор return, будет возвращать неопределенное значение. Вы вызываете функцию PlusOne, которая, в свою очередь, вызывает(не возвращает) addNumber, но обе функции явно ничего не возвращают, попробуйте вернуть addNumber в обоих случаях.
var plusOne = function (digits) {
return addNumber(digits.length - 1, 1, digits);
function addNumber(index, value, digitsArr) {
let sum = digitsArr[index] value;
if (sum > 9) {
let onesDigit = parseInt(sum.toString().charAt(1));
digitsArr[index] = onesDigit;
let twosDigit = parseInt(sum.toString().charAt(0));
return addNumber(index - 1, twosDigit, digitsArr);
} else {
digitsArr[index] = sum;
return digitsArr;
}
}
};
console.log(plusOne([1, 2, 9]));