Poloniex.returnTickerエンドポイントに接続する単純な抽出関数を実装しようとしていて、 'BTC'で始まる通貨ペアの 'last'キーを抽出します。 'BTC'で始まるいくつかのキーがありますが、私の抽出機能はちょうど1つのキーを返した後に停止しています。私は次のようにオブジェクトに抽出されたデータをマッピングしています:Objectのフィルタキー
extracted = {
BTC: {
STR: {
lastPrice: price
},
ETH: {
lastPrice: price
}, //...
}, //...
}
Iは、抽出のために次の関数を書いた:参考のため
module.exports = {
extractData: (tickerdata, marker) => {
if(!!!marker){
marker = 'BTC';
}
return new Promise((res, rej) => {
let currentBuffer = {};
Object.keys(tickerdata)
.filter((key) => {
return key.startsWith(marker);
})
.forEach((filtKey) => {
let c = filtKey.split('_'),
src = c[0],
dst = c[1];
currentBuffer[src] = {};
Object.keys(tickerdata[filtKey])
.forEach((entry) => {
if(!!!(dst in currentBuffer[src])){
currentBuffer[src][dst] = {};
}
if(entry == 'last'){
currentBuffer[src][dst]['lastPrice'] = tickerdata[filtKey][entry];
}
});
});
res(currentBuffer);
});
},//... rest of the module exports
を、各コールは、以下にティッカーエンドポイント戻りデータを返します形式:Poloniex API。例えば、returnTickerエンドポイントを見てください。
抽出機能に論理エラーがあると推測していますが、どこがわからないのですか。
あなたの提案の問題は、 'tickerdata [marker]'が 'undefined'になることです。 tickerdataオブジェクトにはそのようなフィールドはありません。各キーは、キーがBTC_STR、USDT_STRなどの形式の通貨ペアです。抽出機能では、最初に通貨ペアを分離し、基本通貨(BTC、USDT)を識別する必要があります。基本通貨ごとに、宛先通貨の情報(この例ではSTR)がマップされます。明確にするために、 '抽出された'オブジェクトは、抽出されたデータを格納するために使用したいオブジェクトです。 –
あなたの「新しい」要件を満たす答えが更新されました)) – Ali