javascript - 从二分查找函数返回值

标签 javascript arrays functional-programming binary-search

以下代码对数组进行二分查找。我完成了最困难的部分,并让代码在理论上可以工作;不幸的是,我无法从函数中返回值;

简而言之,我希望返回 'len' ;如果您在该行中设置断点,您将看到“len”包含正确的答案。但我错过了一些非常愚蠢的事情。请帮我鉴定一下。

var states = ['Alabama','Alaska','American Samoa','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','District of Columbia','Federated States of Micronesia','Florida','Georgia','Guam','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Marshall Islands','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Northern Mariana Islands','Ohio','Oklahoma','Oregon','Palau','Pennsylvania','Puerto Rico','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virgin Island','Virginia','Washington','West Virginia','Wisconsin','Wyoming'];
function binarySearch(arr1,term){
  var arr = [...arr1],
    len = 0;
  function helper(arr,term) {
    if(arr.length > 1) {
      if(arr[Math.floor(arr.length/2)] === term) {
          len += Math.floor(arr.length/2);
          return len;
      }
      if(arr[Math.floor(arr.length/2)] < term) {
          len += Math.floor(arr.length/2);
          arr.splice(0,Math.floor(arr.length/2));
          helper(arr,term)
      }
      else if (arr[Math.floor(arr.length/2)] > term) {
          arr.splice(Math.floor(arr.length/2),arr.length-1);
          helper(arr,term)
      }
    } else {
        return 'Element not found';
    }
  }
  return helper(arr,term);
}
console.log(binarySearch(states,"Arizona"));

最佳答案

您的递归调用也应该返回给调用者:

替换:

helper(arr,term)

与:

return helper(arr,term)

在这两种情况下。

关于javascript - 从二分查找函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667811/

相关文章:

javascript - 是否有返回函数的 javascript 函数的名称?

types - 阴阳延续拼图在打字语言中有意义吗?

javascript - Javascript 中的 !function 是什么意思?

arrays - 根据键(id)对perl数组数据结构中的键值对进行排序

javascript - 在javascript中获取具有相似id数组的所有元素

javascript - 将对象属性保存到数组时出现奇怪的重复

syntax - 转换大型不可变消息

Javascript 代码表现出意外的逻辑行为

javascript - React 18 不再支持 Warning::ReactDOM.render。请改用 createRoot

javascript - 从旋转的元素中查找元素的实际高度和宽度