JavaScript:如何在含数组的对象中查找值对应的对象键?
解决方法
你现在的代码逻辑完全搞反了:Object.keys(rangesObj).find(val => search.includes(val)) 里的val是对象的键名(比如high、medium),你拿搜索字符串"63"去判断是否包含键名,这当然找不到结果。正确的逻辑应该是检查每个键对应的数组里有没有目标数字,还要注意字符串和数字的类型匹配问题。
给你两种可行的写法:
写法1:把搜索值转成数字再检查
const search = "63"; const searchNum = Number(search); // 转成数字,和数组里的元素类型统一 const rangesObj = { high: [67, 94, 57], medium: [43, 89, 63, 12], low: [27, 41, 77, 99], }; const result = Object.keys(rangesObj).find(key => rangesObj[key].includes(searchNum) ); console.log(result); // 输出 "medium"
写法2:用宽松相等判断,不用转类型
如果不想额外转换类型,可以用some方法配合==来检查数组元素:
const search = "63"; const rangesObj = { high: [67, 94, 57], medium: [43, 89, 63, 12], low: [27, 41, 77, 99], }; const result = Object.keys(rangesObj).find(key => rangesObj[key].some(num => num == search) ); console.log(result); // 输出 "medium"
逻辑说明
Object.keys(rangesObj)会拿到对象的所有键:["high", "medium", "low"]find方法会遍历这些键,返回第一个符合条件的键includes是严格匹配类型的检查,所以需要把字符串转成数字才能匹配数组里的数字some方法只要数组里有一个元素满足条件就返回true,==会自动处理字符串和数字的类型转换
内容的提问来源于stack exchange,提问作者Fjott
相关产品推荐
相关产品推荐

