let data = {
"ethusd": {
"at": 1581416882,
"ticker": {
"buy": "218.87",
"sell": "219.0",
"low": "0.0",
"high": "0.0",
"open": 209.09,
"last": "0.0",
"volume": "72877.8789",
"avg_price": "213.699103431748658920247612509",
"price_change_percent": "-100.00%",
"vol": "72877.8789"
}
},
"trstusd": {
"at": 1581416882,
"ticker": {
"buy": "0.0",
"sell": "0.0",
"low": "0.0",
"high": "0.0",
"open": "0.0",
"last": "0.0",
"volume": "0.0",
"avg_price": "0.0",
"price_change_percent": "+0.00%",
"vol": "0.0"
}
},
"trsteth": {
"at": 1581416882,
"ticker": {
"buy": "0.0",
"sell": "0.0",
"low": "0.0",
"high": "0.0",
"open": "0.0",
"last": "0.0",
"volume": "0.0",
"avg_price": "0.0",
"price_change_percent": "+0.00%",
"vol": "0.0"
}
}
}
let valueOfKeysToFound = ['buy', 'sell'];
let simpleObjSubset = [];
function scrapData(obj, valueOfKeysToFound) {
if (typeof obj === 'object') {
let tempValues = {};
let keyFoundCount = 0;
for (let property in obj) {
let value = obj[property];
if (typeof value === 'object') {
scrapData(value, valueOfKeysToFound);
} else if (valueOfKeysToFound.includes(property)) {
tempValues[property] = value;
keyFoundCount++;
if (keyFoundCount == valueOfKeysToFound.length) {
simpleObjSubset.push(tempValues);
break;
}
}
}
}
}
scrapData(data, valueOfKeysToFound);
console.table(simpleObjSubset);
Когда кто-то говорит «эффективный», это означает достаточно надежный с точки зрения производительности, а когда кто-то говорит «хорошая практика», он неоднозначен от человека к человеку, проблема к проблеме и логика c к логикам c.
Проблема, которую вы упомянули, может быть решена подходом, который я написал, почему я решаю его таким образом? Потому что
- Я знаю, что делает каждая строка.
- Она может масштабироваться.
- Она может проверять число N глубины.
И самая важная часть того, что вы пишете как решение, должно дать вам достаточно контроля, чтобы что-то изменить.