StackOverflow でこの質問に対する答えが見つからないことに驚いています (検索が正しくない可能性があります)。
しかし、基本的には Array.indexOf() メソッドに似たものがあるかどうか知りたいのですが、オブジェクト用です。つまり、既存のオブジェクト内の値のインデックスを返す効率的な方法です。
たとえば、次のオブジェクトがあるとします。
var obj = { prop1: "a", prop2: "b", prop3: "c", prop4: "a" };
ここで、「a」を含むインデックスを見つけたいと思います。a を実行して、次のobj.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"]
しかし、このような方法でオブジェクト全体を反復処理するのは面倒です!! これから扱うオブジェクトの中には非常に大きく、値も非常に大きくなるものがあります。
より良い、より効率的な方法はありますか?