我很惊讶在 StackOverflow 上找不到这个问题的答案(也许我搜索的不正确)。
但基本上我很想知道是否有类似于 Array.indexOf() 方法的东西,但对于对象。也就是说,一种返回现有对象中值的索引的有效方法。
例如,假设我有一个对象:
var obj = { prop1: "a", prop2: "b", prop3: "c", prop4: "a" };
现在我想找到包含“a”的索引,最好做 aobj.indexOf("a")
并让它返回类似的东西["prop1", "prop4"]
但这似乎不是对象的实现方法。
或者,我知道我可以创建一个函数:
function indexOf(val, obj){
var indexes = [];
for (var index in obj){
if(!obj.hasOwnProperty(index)) continue;
if(obj[index] == val){
indexes.push(index);
}
}
if(!indexes.length) return false;
else return indexes;
}
indexOf("a", obj); // returns ["prop1","prop4"]
但是以这种方式迭代整个对象感觉很笨拙!我将要处理的一些对象会非常大,而且值也可能非常大。
有没有更好、更有效的方法?