调试器检查的代码在console.log中显示正确的返回值,那么为什么我返回未定义?

时间:2019-04-20 04:44:29

标签: javascript

我试图确定传入的数组是升序,降序,旋转升序还是旋转降序。尽管在将适当的字符串传递到父函数console.log("RA");的参数中时,现在在整个函数末尾注释掉的solve显示为“ RA”,但返回“ RA”返回{{1} }。我在控制台中调用undefined时用于arr参数的示例数组是[4,5,6,1,2,3],一个旋转升序数组。

我尝试声明变量并使用它们代替文字返回值,并在几个不同的位置声明了它们。我已经签出并关注了相关的Stack Overflow帖子。

solve

1 个答案:

答案 0 :(得分:0)

您的问题是,您拥有console.log("RA")return "RA"的部分位于arr.forEach(..)内部的功能中。因此,您可以正确地将{RA}返回到forEach内部的函数,而不返回任何内容到solve

要解决此问题,请在retVal函数之前放置forEach。见下文。

function solve(arr) {

  let asc = arr.every(function(x, i) {
    return i === 0 || x >= arr[i - 1];
  });

  let desc = arr.every(function(x, i) {
    return i === 0 || x <= arr[i - 1];
  });

  if (asc) {
    return "A"
  }
  if (desc) {
    return "D"
  }
  
  let retVal = "none";
  if (!asc || !desc) {  
    arr.forEach(function(el, i) {
      let rtdAsc = "RA"
      let rtdDesc = "RD"

      let ascFind = arr.find(function(el, i) {
        return el >= arr[i - 1]
      })

      let descFind = arr.find(function(el, i) {
        return el <= arr[i - 1];
      })

      if (ascFind && descFind) {
        if (el === ascFind && arr[i] === el && arr[i + 1] > ascFind) {
          console.log("RA");
          retVal = "RA";
          return; //not exactly necessary
        } 
        else if (el === ascFind && arr[i] === el && arr[i + 1] < ascFind) {
          retVal = "RD";
          return; //not exactly necessary
        }
      }
    })
  }
  
  return retVal;
}

console.log(solve([4,5,6,1,2,3]));