内部函数的javascript返回未定义

mv1qrgav  于 2021-09-29  发布在  Java
关注(0)|答案(4)|浏览(315)

我正在做一个简单的leetcode问题,我们将一个数字添加到一个数组中。我的逻辑运行良好,但返回值未定义。控制台给出了正确的答案。为什么?我该如何修复它?

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]))
ogsagwnx

ogsagwnx1#

  1. return 函数的价值 addNumber ,如果您不从函数返回某些内容,那么js将返回 undefined 含蓄地
return addNumber(digits.length - 1, 1, digits);

2) 您必须从 addNumber 在任何情况下都起作用。你可以做两件事中的一件 return digitsArr 从功能 addNumber 不仅来自 else 部分
返回 addNumber(index - 1, twosDigit, digitsArr);if 返回 digitsArrelse .
主要部分是从函数返回一些完全取决于您希望对代码执行什么操作的内容。

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]));
g52tjvyc

g52tjvyc2#

plusone不返回任何内容,也不返回addnumber(索引-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
          console.log(digitsArr)
          return digitsArr
        }
    }
};

console.log(plusOne([1,2,9]))
mw3dktmi

mw3dktmi3#

您正在调用该函数 plusOne 哪个inturn调用内部函数 addNumber . 它不返回任何值。因此,与其只是打电话 addNumber(digits.length - 1, 1, digits) 您必须像这样返回该值 return addNumber(digits.length - 1, 1, digits) . 因为父函数期望执行的结果。所以你必须用一个 return 陈述
也在里面 addNumber 当sume大于调用的9 rether时的函数 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]));
jbose2ul

jbose2ul4#

在javascript中,缺少显式return语句的函数将返回undefined。您正在调用一个函数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]));

相关问题