Как проверить существующую таблицу и, если она уже существует, изменить ее вместо создания новой? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь создать приложение, которое использует API, который каждую секунду выдает новую информацию.Эта информация берется через веб-сокет (socket.io).Когда данные всего объекта передаются на клиентскую сторону, он должен создать таблицу с некоторыми данными, соответствующими имени объекта.

Это часть объекта, полученная отAPI

{ eventType: '24hrTicker',
  eventTime: 1552416167544,
  symbol: 'ZRXBNB',
  priceChange: '0.00063000',
  percentChange: '3.571',
  averagePrice: '0.01780410',
  prevClose: '0.01776000',
  close: '0.01827000',
  closeQty: '200.00000000',
  bestBid: '0.01815000',
  bestBidQty: '1028.90000000',
  bestAsk: '0.01828000',
  bestAskQty: '589.00000000',
  open: '0.01764000',
  high: '0.01858000',
  low: '0.01726000',
  volume: '197350.10000000',
  quoteVolume: '3513.64020500',
  openTime: 1552329767540,
  closeTime: 1552416167540,
  firstTradeId: 4948,
  lastTradeId: 5281,
  numTrades: 334 }
{ eventType: '24hrTicker',
  eventTime: 1552416168270,
  symbol: 'ZRXUSDT',
  priceChange: '0.01380000',
  percentChange: '5.347',
  averagePrice: '0.26415650',
  prevClose: '0.25780000',
  close: '0.27190000',
  closeQty: '648.50000000',
  bestBid: '0.27190000',
  bestBidQty: '3607.03000000',
  bestAsk: '0.27300000',
  bestAskQty: '1196.01000000',
  open: '0.25810000',
  high: '0.27850000',
  low: '0.24930000',
  volume: '2710750.57000000',
  quoteVolume: '716062.38319800',
  openTime: 1552329768267,
  closeTime: 1552416168267,
  firstTradeId: 40021,
  lastTradeId: 44116,
  numTrades: 4096 }
{ eventType: '24hrTicker',
  eventTime: 1552416168170,
  symbol: 'FETBNB',
  priceChange: '-0.00053000',
  percentChange: '-3.411',
  averagePrice: '0.01512124',
  prevClose: '0.01554000',
  close: '0.01501000',
  closeQty: '84.60000000',
  bestBid: '0.01498000',
  bestBidQty: '3603.60000000',
  bestAsk: '0.01508000',
  bestAskQty: '1416.70000000',
  open: '0.01554000',
  high: '0.01665000',
  low: '0.01414000',
  volume: '15016967.00000000',
  quoteVolume: '227075.23396700',
  openTime: 1552329768166,
  closeTime: 1552416168166,
  firstTradeId: 149059,
  lastTradeId: 154620,
  numTrades: 5562 }
{ eventType: '24hrTicker',
  eventTime: 1552416168453,
  symbol: 'FETBTC',
  priceChange: '-0.00000060',
  percentChange: '-1.024',
  averagePrice: '0.00005741',
  prevClose: '0.00005857',
  close: '0.00005800',
  closeQty: '26057.00000000',
  bestBid: '0.00005780',
  bestBidQty: '126.00000000',
  bestAsk: '0.00005794',
  bestAskQty: '2033.00000000',
  open: '0.00005860',
  high: '0.00006217',
  low: '0.00005455',
  volume: '45952459.00000000',
  quoteVolume: '2638.19720144',
  openTime: 1552329768449,
  closeTime: 1552416168449,
  firstTradeId: 1070694,
  lastTradeId: 1108815,
  numTrades: 38122 }
{ eventType: '24hrTicker',
  eventTime: 1552416168472,
  symbol: 'FETUSDT',
  priceChange: '-0.00140000',
  percentChange: '-0.618',
  averagePrice: '0.22380295',
  prevClose: '0.22640000',
  close: '0.22500000',
  closeQty: '2776.62000000',
  bestBid: '0.22470000',
  bestBidQty: '222.52000000',
  bestAsk: '0.22490000',
  bestAskQty: '1416.72000000',
  open: '0.22640000',
  high: '0.24140000',
  low: '0.20870000',
  volume: '37116510.87000000',
  quoteVolume: '8306784.57211700',
  openTime: 1552329768464,
  closeTime: 1552416168464,
  firstTradeId: 678606,
  lastTradeId: 703455,
  numTrades: 24}

Это код ejs, который я использую для проверки существующей строки, чтобы он не создавал новую, а просто обновлял существующую табличную строку с идентификатором символасодержит символы.

EJS CODE

<script>
                    var tabelBody = document.getElementById("coinDataTabel");
                    var testData = document.getElementById("test");
                    var symbol = [];
                    var existingRow;
                    var currentPair;

                    socket.on("coins", function(allCoinData){
                        if(allCoinData["symbol"].substr(allCoinData["symbol"].length - 3) == "BTC"){
                            currentPair = symbol.find(function(){
                                return allCoinData["symbol"];
                            });
                            if(currentPair == true){
                                testData.innerHTML = "<p>"+"symbol find is true!"+"</p>";
                                existingRow = document.getElementById(allCoinData["symbol"]);
                                existingRow.innerHTML = "<td>"+allCoinData["symbol"]+"</td>"+"<td>"+allCoinData["high"]+"</td>"+"<td>"+allCoinData["low"]+"</td>"+"<td>"+allCoinData["close"]+"</td>";
                            } else {
                                testData.innerHTML = "<p>"+"symbol find is false!"+"</p>";
                                symbol.push(allCoinData["symbol"]);
                                tabelBody.innerHTML += "<tr id="+allCoinData["symbol"]+">"+"<td>"+allCoinData["symbol"]+"</td>"+"<td>"+allCoinData["high"]+"</td>"+"<td>"+allCoinData["low"]+"</td>"+"<td>"+allCoinData["close"]+"</td>"+"</tr>";   
                            }
                        }
                    });
                </script>

Код проверяет наличие любого символа, заканчивающегося на «BTC».Все остальные символы в этом примере пропущены.После этого я попытался проверить, содержит ли символ массива тот же символ, который API возвращает в этой точке.если это так, он должен обновить строку, которая уже существует, вместо создания новой.

Пожалуйста, помогите мне, потому что я пробовал так много разных вещей, но ни одна не работала должным образом.

1 Ответ

0 голосов
/ 12 марта 2019

Согласно тому, что я понимаю, в вашей таблице есть строки, в которых id является символом ваших данных.

Таким образом, вместо отдельного сохранения массива символов, вы можете проверить существование строки (tr) с идентификатором входящего символа, используя document.getElementById (allCoinData ["symbol"]) .

Если строка существует, обновите строку (tr), иначе создайте новую.

Примерно так.

socket.on("coins", function(allCoinData){
  existingRow = document.getElementById(allCoinData["symbol"]);
  if(!!existingRow){
    testData.innerHTML = "<p>"+"symbol find is true!"+"</p>";
    existingRow = document.getElementById(allCoinData["symbol"]);
    existingRow.innerHTML = "<td>"+allCoinData["symbol"]+"</td>"+"<td>"+allCoinData["high"]+"</td>"+"<td>"+allCoinData["low"]+"</td>"+"<td>"+allCoinData["close"]+"</td>";
  } else {
      testData.innerHTML = "<p>"+"symbol find is false!"+"</p>";
      symbol.push(allCoinData["symbol"]);
      tabelBody.innerHTML += "<tr id="+allCoinData["symbol"]+">"+"<td>"+allCoinData["symbol"]+"</td>"+"<td>"+allCoinData["high"]+"</td>"+"<td>"+allCoinData["low"]+"</td>"+"<td>"+allCoinData["close"]+"</td>"+"</tr>";   
  }
});

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...