列和行的值

时间:2019-02-23 03:22:03

标签: javascript bitcoin cryptocurrency

我正在Google表格中使用此脚本从coinmarketcap api中提取数据。我添加了一个循环(coins.forEach),只需一次调用api(有限的信用)即可获取我想要的硬币的所有数据。但是在每个循环/硬币之后,它会继续在列中下降,我想为每个硬币使用新的列。如何在不为每个硬币再次调用函数(和API)的情况下执行此操作?我希望我能说清楚一点,我不记得我在哪里找到原始剧本

function cmc(){
  var response = CMCFetch();
  if (response.status === true) { response.data = response.datos; 
      }  
  return response.data;}

function xCMCFetch() {
  
    var uri = "https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?CMC_PRO_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

      cache     = CacheService.getScriptCache(),
      response  = { status: true, name: "Unknown", USD: 0, BTC: 0, datos: [], error:null },
      obj_array = null;
      obj_array = JSON.parse(cache.get('firstX'));
  if (obj_array === null ) 
  { try { 
    obj_array = JSON.parse(UrlFetchApp.fetch(uri).getContentText());  
    cache.put('firstX', JSON.stringify(obj_array), 20); }   // ** cache for 20 sec
    catch (e) { response.status = false; response.error = e }  }   
   
  var coins = ["btc","eth","ltc","bch"]; 
  
  if (response.status === true) { 
    coins.forEach(function(symb){
   for (r in obj_array.data){
      if (obj_array.data[r].symbol == symb.toUpperCase()) { 
        response.datos.push(
          obj_array.data[r].total_supply,          
          obj_array.data[r].cmc_rank,
          obj_array.data[r].quote.USD.market_cap,
          obj_array.data[r].quote.USD.volume_24h,
          parseFloat(obj_array.data[r].quote.USD.percent_change_7d), 
          parseFloat(obj_array.data[r].quote.USD.percent_change_24h), 
          parseFloat(obj_array.data[r].quote.USD.percent_change_1h),
          obj_array.data[r].quote.USD.price
           );
        break;  }   } })}
  return response;
}

1 个答案:

答案 0 :(得分:1)

我猜问题出在for (r in obj_array.data)。 这意味着您要遍历每个对象的属性。 因此,您无法致电obj_array.data[r].symbol。 将其替换为for (int r = 0; r < obj_array.data.length; r++)