首页 > 解决方案 > JavaScript在数组中找到<=给定数字的第一个数字

问题描述

我有一个素数数组:

const primes = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]

我想在这个列表中找到第一个 <= 给定数字的数字。

例如 ... getHighestPrimeNumber(58)... 应该返回 53,它是最大的质数,也小于或等于 58

期待结果:

getHighestPrimeNumber(58) === 53

getHighestPrimeNumber(53) === 53

getHighestPrimeNumber(52) === 47

我目前的方法是遍历素数,但这非常低效,特别是考虑到列表中可能有 10,000 多个数字 - 谢谢

Vanilla JS 或 Lodash 都可以

标签: javascriptlodash

解决方案


既然你用标签发布了这个,仅供参考,由于_.sortedIndexlodash,这很简单

const primes = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]

const closestPrime = (n) => {
  let index = _.sortedIndex(primes, n)
  return primes[index] == n ? primes[index] : primes[index-1]
}

console.log(closestPrime(58))
console.log(closestPrime(53))
console.log(closestPrime(52))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>


推荐阅读