Javascript在对象数组中找到最接近的数字并检索对象的键值

efg*_*gdh 2 javascript arrays object max

我有一个对象数组(带有keys: name, quoteNumber),我想找到最接近quoteNumber的小于给定数字的对象,然后检索该对象的名称,我已经考虑使用 for 循环来删除较大的值,并获得最大值从其余的,但考虑到数据集有多大,它可能不是最好的选择。这是任何其他更有效的算法吗?谢谢!

const givenNum = 45
var array = [ 

    { name: "Sally",
      quoteNumber: 35},
    { name: "Jane",
      quoteNumber: 20},
    { name: "Edwin",
      quoteNumber: 55},
    { name: "Carrie",
      quoteNumber: 47}];

//'result:' Sally

Run Code Online (Sandbox Code Playgroud)

Jer*_*man 5

如果它是未排序的,那么最有效的方法就是单次传递。

function getHighestQuote(quotes, limit) {
  let winner = null;
  let winningQuote = null;
  for (let {name, quoteNumber} of quotes) {
    if (quoteNumber > limit)
      continue;
    if (winningQuote === null || winningQuote < quoteNumber) {
      winner = name;
      winningQuote = quoteNumber;
    }
  }
  return winner;
}
Run Code Online (Sandbox Code Playgroud)

它不像函数式方法那么时髦,但它是一个线性时间传递,只需要分配几个堆栈变量。