javascript - 如何在不反转的情况下从右侧查找数组?
问题描述
我有一个包含版本号的数组。它们已排序,但稀疏。一个示例可能如下所示:
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
。这里唯一的问题是:findRight
JavaScript 中没有函数
我可以想到两种可能的解决方法:
- 首先
reverse
是数组,然后使用普通find
函数。不幸的是,这变得非常慢,因为我需要在循环中针对不同版本的数组多次运行此查询。 - 其次,实现自定义
findRight
功能。这会起作用,但这听起来像是解决了一个已经被其他人解决的问题。
在我去实现我自己的函数之前——有没有更好(即更快)的方法可以使用纯 JavaScript 并且没有 npm 模块?
解决方案
试试这个,希望对你有帮助。
console.log( versions.find((item, index, arr) => item.version <= 16 && arr[index+1].version > 16) );
推荐阅读
- python - 加载 3D Niftii 图像并保存轴向、冠状、矢状的所有切片?
- php - 尽管使用 html,但 PHP 表单未在 php 上提交
- python - 使用 Pygame 渲染故障
- python - AttributeError:“事件”对象没有“更宽”属性
- sql - 试图增强查询以给我结果
- javascript - 如何将订单详细信息传递给 PayPal 智能按钮结账
- javascript - Fix covering hovered table / hovering problem with table
- javascript - 当我返回地图和数字时,它们没有正确解构(未定义)
- php - Xdebug 甚至不尝试连接到端口 9000
- java - 您尝试访问的存储桶必须使用指定的终端节点进行寻址 将文件上传到 AWS S3