[英]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.