首页 > 解决方案 > 如何在不反转的情况下从右侧查找数组?

问题描述

我有一个包含版本号的数组。它们已排序,但稀疏。一个示例可能如下所示:

const versions = [
  { version: 1, data: { ... }},
  { version: 3, data: { ... }},
  { version: 17, data: { ... }},
  { version: 95, data: { ... }}
];

现在,如果我想访问 version 17,事情很简单:

const data = versions.find(item => item.version === 17);

但是如果我想访问 version16怎么办,例如?从领域的角度来看,我想获得的是在所需版本之前发布的最高版本,在这种情况下是 version 。3

如果我们结合这两个查询,这基本上意味着我正在寻找数组中的最后一个条目,即<=所需的版本。现在的问题是:如何有效地做到这一点。

findRight如果数组上有一个函数,事情会很容易,因为这样我就可以写:

const data = version.findRight(item => item.version <= 16);

这将返回 version 3。如果我们使用 运行相同的命令17,它将返回 version 17。这里唯一的问题是:findRightJavaScript 中没有函数

我可以想到两种可能的解决方法:

在我去实现我自己的函数之前——有没有更好(即更快)的方法可以使用纯 JavaScript 并且没有 npm 模块?

标签: javascriptarrays

解决方案


试试这个,希望对你有帮助。

console.log( versions.find((item, index, arr) => item.version <= 16 && arr[index+1].version > 16) );

https://jsfiddle.net/dummy9807/o0z5xvrk/8/


推荐阅读