首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在初始化后立即访问javascript映射或对象?

如何在初始化后立即访问javascript映射或对象?
EN

Stack Overflow用户
提问于 2018-10-17 23:45:16
回答 1查看 0关注 0票数 0

我必须将这些数据显示在表格中。每个新日期都显示在新行上,每个金属应该有自己的列。

现在我已成功将数据放入javascript对象我也尝试过map。但问题是在将数据放入其中之后我无法立即访问它返回旧数据或未定义。

我见过其他答案,其中使用了promise方法或延迟或setTimeout。

我试过延迟和超时,但没用。承诺会有效还是有办法?这是我用来将数据放入对象的代码

代码语言:javascript
复制
   var strTd = '<td>'+v.LME_S_Cash+'</td><td>style="border-right:1px solid grey">'+v.LME_S_3M+'</td>';
   MetalSequence[v.metal_type] = strTd;                              
   metalMap.set(v.metal_type,strTd);
   MetalSequence['date'] = v.date;

对象的内容是这样的

代码语言:javascript
复制
{Nickle: "<td>12690</td><td style="border-right:1px solid grey">12730</td>", date: "2018-01-02", Zinc: "<td>3350.5</td><td style="border-right:1px solid grey">3331</td>", Copper: "<td>7115.5</td><td style="border-right:1px solid grey">7160</td>", Tin: "<td>20050</td><td style="border-right:1px solid grey">19950</td>", …}
Aluminum: "<td>2256</td><td style="border-right:1px solid grey">2268</td>"
Copper: "<td>7181</td><td style="border-right:1px solid grey">7228</td>"
Lead: "<td>2544</td><td style="border-right:1px solid grey">2538</td>"
Nickle: "<td>12690</td><td style="border-right:1px solid grey">12730</td>"
Tin: "<td>20160</td><td style="border-right:1px solid grey">20075</td>"
Zinc: "<td>3377</td><td style="border-right:1px solid grey">3351</td>"
date: "2018-01-02"

显示的条目不同,内容也不同。我应该遵循javascript或任何标准的任何专业知识?

这是我的整个代码

代码语言:javascript
复制
var ajaxCall = $.ajax({
  url: str_domain + "index.php?q=commodity/get_ajax_data",
  jsonp: "callback",
  jsonpCallback: 'jsonCallback',
  contentType: "application/json",
  dataType: "jsonp",
  cache: true,
  data: {
    section: "settlemetDataFilter",
    format: "json",
    settlementCategory: SETTLEMENT_CHECK,
    year: YEAR_CHECK,
    month: MONTH_CHECK
  }
})

$.when(ajaxCall).then(function(response) {
  // ajaxCall.done(function(response) {
  // console.log(response); 

  var tableHead = '<table><thead><th></th>';
  var table = '';
  var tableSubHead = '<tr><thead><th>Date</th>';
  var tableHeadEnd = '</thead><tbody>';
  var dateRecord = '';
  var metalTypes = [];

  var rowSeven = 0;
  var totalMetals = {};
  var checkedMetalTypes = 0;
  var averageArray = [];

  var MetalSequence = {};
  var preMetalSeq = [];
  var metalMap = new Map();
  if (response != '' && response != null) {

    $.each(response.data, function(k, v) {
      if (!(preMetalSeq.includes(v.metal_type))) {
        preMetalSeq.push(v.metal_type);
      }
    })
    console.log(preMetalSeq);
    $.each(response.data, function(k, v) {
      if (SETTLEMENT_CHECK == 'LMESettlement') {

        var strTd = '<td>' + v.LME_S_Cash + '</td><td style="border-right:1px solid grey">' + v.LME_S_3M + '</td>';
        MetalSequence[v.metal_type] = strTd;
        metalMap.set(v.metal_type, strTd);
        MetalSequence['date'] = v.date;

        if (!(metalTypes.includes(v.metal_type))) {
          totalMetals[v.metal_type] = '<td>' + v.LME_S_Cash + '</td><td>' + v.LME_S_3M + '</td>';
          metalTypes.push(v.metal_type);
          tableHead += '<th colspan="2">' + v.metal_type + '</th>';
          tableSubHead += '<th>Cash</th><th>3M</th>';
        }

        if (dateRecord != v.date) {
          dateRecord = v.date;
          rowSeven++;
          var trRightSequence = '';
          console.log(MetalSequence, metalMap);
          for (var i = 0; i < preMetalSeq.length; i++) {

            trRightSequence += MetalSequence[preMetalSeq[i]];
            console.log(preMetalSeq[i]);
          }
          table += '</tr><tr><td style="border-right:1px solid grey">' + v.date + '</td>' + trRightSequence;
        }
      }
    })
  }

  tableHead += tableHeadEnd + '</tr></thead>' + tableSubHead + '</thead></tr>';
  if (table != '') {
    table += '</tbody></table>';
    $('#settlement_table').html(tableHead + table);
  } else {
    $('#settlement_table').html('<p>No Data Available</p>');
  }
})
EN

回答 1

Stack Overflow用户

发布于 2018-10-18 09:31:37

你正在preMetalSeq通过添加的循环处理每次中的所有元素MetalSequence。我怀疑问题是有一个尚未添加的金属的参考。你应该先添加所有金属,然后再加工preMetalSeq

代码语言:javascript
复制
$.each(response.data, function(k, v) {
  if (!(preMetalSeq.includes(v.metal_type))) {
    preMetalSeq.push(v.metal_type);
  }
  if (!(metalTypes.includes(v.metal_type))) {
    totalMetals[v.metal_type] = '<td>' + v.LME_S_Cash + '</td><td>' + v.LME_S_3M + '</td>';
    metalTypes.push(v.metal_type);
    tableHead += '<th colspan="2">' + v.metal_type + '</th>';
    tableSubHead += '<th>Cash</th><th>3M</th>';
  }
  var strTd = '<td>' + v.LME_S_Cash + '</td><td style="border-right:1px solid grey">' + v.LME_S_3M + '</td>';
  MetalSequence[v.metal_type] = strTd;
  metalMap.set(v.metal_type, strTd);
});

$.each(response.data, function(k, v) {
  if (SETTLEMENT_CHECK == 'LMESettlement') {
    MetalSequence['date'] = v.date;
    if (dateRecord != v.date) {
      dateRecord = v.date;
      rowSeven++;
      var trRightSequence = '';
      console.log(MetalSequence, metalMap);
      $.each(preMetalSeq, function(preMetal) {
        trRightSequence += MetalSequence[preMetal];
      });
      table += '</tr><tr><td style="border-right:1px solid grey">' + v.date + '</td>' + trRightSequence;
    }
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档