如何根据ContractID值获取对象中对应项的键?
如何获取对象中ContractID匹配项的键?
嘿,我懂你的困扰啦——你想从这个对象里找出ContractID等于10的项对应的键(比如示例里的0),但用filter拿到的是匹配的对象数组,不是你要的键对吧?
首先得说清楚:filter是数组的方法,而你的数据结构是一个普通对象(不是数组),所以直接调用objname.filter肯定达不到预期效果。下面给你两种实用的解决方法:
方法一:用Object.keys()配合筛选
先把对象的所有键提取成数组,再筛选出符合条件的键:
// 你的目标对象 const obj = { 0 : {ContractID: 10, Name: "dog"}, 1 : {ContractID: 20, Name: "bar"}, 2 : {ContractID: 30, Name: "foo"} }; // 获取所有匹配的键(如果有多个符合条件的项,会返回包含所有键的数组) const matchingKeys = Object.keys(obj).filter(key => obj[key].ContractID === 10); // 如果只需要第一个匹配的键,取数组第一项即可 const targetKey = matchingKeys[0]; // 结果是字符串"0",转数字的话用 Number(targetKey)
这个方法的好处是能一次性拿到所有符合条件的键,如果你的对象里可能有多个ContractID等于10的项,会很有用。
方法二:用for...in循环直接查找
如果只需要第一个匹配的键,用for...in循环遍历对象,找到匹配项就直接返回,效率会更高:
function findKeyByContractId(obj, targetId) { for (const key in obj) { // 确保是对象自身的属性(避免遍历到原型链上的属性) if (obj.hasOwnProperty(key) && obj[key].ContractID === targetId) { return key; // 返回匹配的键,字符串类型,转数字用 Number(key) } } return null; // 如果没找到匹配项,返回null } // 调用函数获取目标键 const targetKey = findKeyByContractId(obj, 10); // 结果是"0"
简单总结一下:你的核心问题是把对象当成数组来用filter了,只要先把对象的键提取出来,或者直接遍历对象的键,就能找到你要的结果啦。
内容的提问来源于stack exchange,提问作者ditto
相关产品推荐
相关产品推荐

