You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不遍历JS对象查找包含指定值对应的键?

解决方案

首先明确结论:原生普通JavaScript对象仅支持「键→值」的单向映射,没有内置反向索引,如果你不提前做数据结构预处理,不可能做到完全不迭代就通过值反向查找对应的键。

如果你的需求是每次调用查询函数时不需要迭代,可以提前遍历一次原数据集构建反向查找映射,后续所有查询都是O(1)时间复杂度,不需要再做迭代:

let data = {
  1: ['item1', '3435'],
  32: ['item2', '5465'],
  16: ['item3', '6577']
}

// 仅初始化时遍历一次,构建值到键的映射表
const valueToKeyMap = Object.fromEntries(
  Object.entries(data).map(([key, [_, numValue]]) => [numValue, key])
)

// 查询时直接取映射表,无任何迭代
function findKey(targetNum) {
  return valueToKeyMap[targetNum]
}

// 测试
findKey('3435') // 返回 "1",注:你给出的测试用例中3534为笔误
findKey('6577') // 返回 "16"

如果数据集后续有新增/修改/删除操作,同步更新valueToKeyMap映射表即可,不需要每次查询重新遍历。

如果你接受单次查询时执行迭代,也可以使用下面的简写写法,本质还是会遍历对象的所有键值对:

function findKey(targetNum) {
  return Object.keys(data).find(key => data[key][1] === targetNum)
}

内容的提问来源于stack exchange,提问作者geek glance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:39:04