簡體   English   中英

調試器檢查的代碼在console.log中顯示正確的返回值,那么為什么我返回undefined?

[英]Debugger-checked code shows correct return value in console.log, so why am I returning undefined?

我正在嘗試確定傳入的數組是升序,降序,旋轉升序還是旋轉降序。 雖然現在注釋掉了console.log("RA"); 在整個函數末尾附近顯示“RA”時,將適當的字符串傳遞給父solve函數的參數,返回“RA”返回undefined 我在控制台中調用solve用於arr參數的示例數組是[4,5,6,1,2,3],一個Rotated Ascending數組。

我已經嘗試聲明變量並使用它們代替文字返回值,並在幾個不同的位置聲明了它們。 我已經檢查並關注了相關的Stack Overflow帖子。

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"
  }
  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){  
            return rtdAsc
              // console.log("RA")
          } else if (el === ascFind && arr[i] === el && arr[i+1] < ascFind){
            return rtdDesc
          }
        }
     })
   } 
} 
~~~~~~~~~~~

I expect the result of invoking the example `solve([4,5,6,1,2,3]);` to result in "RA" through return statements, as it does successfully through `console.log("RA");`

您的問題是您擁有console.log("RA")return "RA"部分位於arr.forEach(..) 內部的函數內。 因此,您正確地將“RA”返回到forEach內部的函數,但不返回要solve任何內容。

要解決此問題,請在forEach函數之前放置一個retVal 見下文。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM