Как сделать так, чтобы эта функция возвращала массив с ключами. Вот код этой самой функции:
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;
}
}
}
}
Эта функция хорошо работает в этом примере:
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: 5,
bar: {
baz: 3
} //для теста сделаем вложеный объект
}
document.write(foobar.getKeyByValue(3));
Однако когда появляется второй ключ с таким же значением, он не находится (понятно почему). Надо сделать так, чтобы getKeyByValue возвращал массив. Так как это можно реализовать?
Object.prototype.getKeysByValue = function (value) {
let keys = [];
for (let key of Object.keys(this)) {
if (this[key] === value) {
keys.push(key);
} else if (typeof this[key] === 'object') {
let keysInner = this[key].getKeysByValue(value);
for (let keyInner of keysInner) {
keys.push(key + '.' + keyInner);
}
}
}
return keys;
};
let foobar = {
aaa: 7,
bbb: 10,
ccc: {
ddd: 7,
eee: {
fff: 7,
ggg: 10
}
}
};
console.log(foobar.getKeysByValue(7));
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости