Я искал и искал, но не могу найти лучшего способа поиска по объекту JSON и возврата вложенного объекта, соответствующего определенному ключу.
Я нашел примеры, которые работают в javascript, но когда я пытаюсь использовать этот код в Google Apps Script, я обнаруживаю, что некоторые функции / модули не поддерживаются.
глубоко Сценарий ниже работает, где objRet является глобальной переменной, но мне было интересно, есть ли лучший способ сделать это?
var objRet;
function blahblah() {
traverse(api_info, "EarningsRates");
// use this.objRet to process code
}
function traverse(json, keyData) {
var keyData = keyData;
var json = json;
if (Array.isArray(json)) {
json.forEach(traverse);
} else if (typeof json === 'object') {
Object.keys(json).forEach(function(key) {
if (key === keyData) {
this.retObj = json[key];
} else {
traverse(json[key], keyData);
}
});
}
}
Я нашел это и хотел бы заставить его работать, но не повезло с Google Apps Script
Эта функция реализует DFS: (поиск в глубину)
function findDFS(objects, id) {
for (let o of objects || []) {
if (o.uuid == id) return o
const o_ = findDFS(o.children, id)
if (o_) return o_
}
}
И BFS: (поиск в ширину)
function findBFS(objects, id) {
const queue = [...objects]
while (queue.length) {
const o = queue.shift()
if (o.uuid == id) return o
queue.push(...(o.children || []))
}
}