Страницы

Поиск по вопросам

пятница, 19 апреля 2019 г.

JavaScript - найти ключ зная его значение

Надо найти в объекте ключ, зная только его значение. Я написал код, но он не находит ключи находящиеся в под-объекте. Вот сам код:
Object.prototype.getKeyByValue = function(value) { for(var prop in this) { if(this.hasOwnProperty(prop)) { if(this[prop] === value) return prop; } } }
Первый пример (работает корректно):
Object.prototype.getKeyByValue = function(value) { for (var prop in this) { if (this.hasOwnProperty(prop)) { if (this[prop] === value) return prop; } } } var foobar = { foo: 4, bar: 7 } document.write(foobar.getKeyByValue(7));
Второй пример (работает не корректно):
Object.prototype.getKeyByValue = function(value) { for (var prop in this) { if (this.hasOwnProperty(prop)) { if (this[prop] === value) return prop; } } } var foobar = { foo: 4, bar: { baz: 7 } } document.write(foobar.getKeyByValue(7));
Почему во втором примере не находит значение и как это исправить?


Ответ

Потому что для поиска вглубь нужна рекурсия.
Object.prototype.getKeyByValue = function(value, objs) { // защита от циклических ссылок if (!objs) objs = []; for (var prop in this) { if (this.hasOwnProperty(prop)) { if (this[prop] === value) { return prop; } else if (typeof this[prop] === "object" && objs.indexOf(this[prop]) == -1) { objs.push(this[prop]); var res = this[prop].getKeyByValue(value, objs); if (res) return prop + "." + res; //за дополнительные баллы оценки - выведем цепочку названий ключей } } } } var foobar = { foo: 4, bar: { baz: 7 } } console.log(foobar.getKeyByValue(7));

Комментариев нет:

Отправить комментарий