我试图确定传入的数组是升序,降序,旋转升序还是旋转降序。尽管在将适当的字符串传递到父函数console.log("RA");
的参数中时,现在在整个函数末尾注释掉的solve
显示为“ RA”,但返回“ RA”返回{{1} }。我在控制台中调用undefined
时用于arr
参数的示例数组是[4,5,6,1,2,3],一个旋转升序数组。
我尝试声明变量并使用它们代替文字返回值,并在几个不同的位置声明了它们。我已经签出并关注了相关的Stack Overflow帖子。
solve
答案 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]));