Вы можете расширить прототип Object следующим образом:
// Returns one key (any) of the value if it exists, or undefined if not
Object.defineProperty(Object.prototype, "keyOf", {
value: function(value) {
for (var key in this) if (this[key] == value) return key;
return undefined;
}
});
Использование этого способа вместо общего Object.prototype.keyOf = ...
будет работать с jQuery, если вы его используете.
И тогда выможно использовать его так:
var myArray = {...};
var index = myArray.keyOf(value);
Он также будет работать с обычными массивами: [...]
, так что вы можете использовать его вместо indexOf
.
Не забудьте использовать тройку-символы операторов, чтобы проверить, не определено ли оно:
index === undefined // to check the value/index exists
index !== undefined // to check the value/index does not exist
Конечно, вы можете изменить имя функции, если вы предпочитаете, и помнить, чтобы не объявлять переменные с именем 'undefined'.Кроме того, в качестве indexOf он вернет не более одного определенного ключа, но может быть более одного возможного, поэтому в этом случае вам понадобится что-то вроде этого (.keysOf(...)
):
// Returns all the keys of the value if it exists (an empty array if not)
Object.defineProperty(Object.prototype, "keysOf", {
value: function(value) {
var allKeys = [];
for (var key in this) if (this[key] == value) allKeys.push(key);
return allKeys;
}
});