У меня есть этот вложенный объект.
const data = {
update: { update_name: 'fistColumn', datafrom_name: 'secondColumn' },
conditon: { update_name: 'firstCondtion', datafrom_name: 'secondCondtion' }
};
Я хочу перебрать вложенные объекты, получить там ключи и проверить их значение и получить там значения и проверить там "значение" если да, верните true
Я создал этот простой цикл, который перебирает вложенный объект, но дает мне все значения также только ключи, а не значение ключа
for (let val in data) {
console.info(data[val]);
}
Я нашел ответ с функцией рекурсии, но его трудно понять в коде. рекурсивно обходить массив/объекты
ключи и значения на самом деле являются элементами dom, поэтому проверьте правильность содержимого
Вы можете включить ожидаемый результат?
Во внутреннем forEach вы также можете написать вместо Object.entries()
, Object.keys()
или Object.values()
, чтобы в результате получить ключ или значение.
С результатом вы можете сделать свою проверку. Он вернет вам массив
const data = {
"update": { "update_name": "fistColumn", "datafrom_name": "secondColumn" },
"conditon": { "update_name": "firstCondtion", "datafrom_name": "secondCondtion" }
};
Object.keys(data).forEach((elem) => {
Object.entries(data[elem]).forEach((va) => { console.info(va) })
})
Вы можете написать простую рекурсивную функцию. Ниже приведена простая реализация. Вы можете улучшить его в зависимости от необходимости.
const data = {
update: { update_name: "fistColumn", datafrom_name: "secondColumn" },
conditon: { update_name: "firstCondtion", datafrom_name: "secondCondtion" },
};
const find = (node, value) => {
if (typeof node === "object") {
let result = null;
Object.entries(node).some(([key, v]) => {
result = find(v, value);
if (result) {
return true;
}
});
return result;
} else {
return node === value ? node : null;
}
};
console.info(find(data, "secondColumn"));
console.info(find(data, "not_found"));
с какой целью key
в some(([key, v]) =>
? в вашем коде переменная не используется
Вот как он возвращается из записей. Вы можете игнорировать эту переменную или просто использовать (obj => obj[1]), решение выше выглядит более стандартным
проверить против чего?