#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));
Почему во втором примере не находит значение и как это исправить?
Ответы
Ответ 1
Потому что для поиска вглубь нужна рекурсия. 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));
Комментариев нет:
Отправить комментарий