【问题标题】:How do I access data in this javascript MAP object?如何访问此 javascript MAP 对象中的数据?
【发布时间】:2010-12-15 21:50:57
【问题描述】:

我正在做一个返回 XML 数据的 AJAX 调用,这是我的“成功:”函数(回调):

success: function (data) { 
        var $rowArray = $(data).find("[nodeName=z:row]");
          $rowArray.each(function(index) { // for each date put it into calMap.
          calMap[$(this)[index].title] = $(this).attr("ows_Title");
          calMap[$(this)[index].date]  = $(this).attr("ows_EventDate");
          });
         }   

calMap 是在函数外部声明的全局 javascript 对象。

var calMap = {};

我想要做的是创建一个函数,我可以在其中传递 title,让它搜索 calMap 以查找该标题,如果找到,则特定对象是返回,我将能够访问该对象的 date 属性。

问题是,我似乎无法访问我插入到 calMap 对象中的数据。首先,我只想打印地图。尝试eval,尝试警告calMap[0],尝试警告calMap[0].title,但没有。有人可以帮我弄这个吗?谢谢!

更新: 我想做这样的事情:

var data = getData("myTitle");

function getData(title) {
// if title is in calMap, something like this?
var result = (calMap[title])); 
return result;  // returns an object or NOTHING
}

然后我会检查是否定义了日期,如果是,我将访问它的属性(即。data.date。这有意义吗?

回答: 我最终使用了一个数组。仍然认为我应该能够使用对象 MAP,但需要完成我的项目。

这是访问数组项的代码的最终代码:

function hasCalDate(code)
{
    var matched = "";
    for (var f=0;f<calMap.length;f++){
        var re = new RegExp(code);
        if (re.test(calMap[f].title))
        {
        matched = calMap[f].title+','+calMap[f].date;
        }
    }
return matched;
};

谢谢大家。

【问题讨论】:

  • 先尝试在chrome或firebug中使用console.log(calMap)
  • 哦,是的,控制台很棒。结果我得到了一系列对象。

标签: javascript jquery object properties map


【解决方案1】:

您需要将calMap 初始化为一个数组(即方括号,而不是大括号):

var calMap = [];

然后,在你的 each 函数中,我猜你想要更多类似的东西

calMap.push({
    title: $(this).attr("ows_Title"),
    date: $(this).attr("ows_EventDate")
});

【讨论】:

  • 感谢 Emmett,这很有效——但我远离直接数组,因为我认为搜索数组与对象的效率会降低。我可以用一个键访问地图并获取属性,而不是遍历整个数组来查找标题,对吗?
  • @tres 在你的问题接近尾声时,你说你正在提醒calmap[0]calMap[0].title(这是数组语法),所以我推断你正在尝试创建一个数组。另外,您希望使用什么类型的键来访问属性?
  • @Emmet - 是的,很抱歉造成混乱。我只是在尝试不同的东西,但绝对想使用“对象”。我想说: calMap['myTitle'] 并访问 calMap.date 以获取它匹配的特定对象(如果它存在)。我会更新我的帖子以了解我想做的事情......给我一秒钟......
  • @tres 您的属性必须具有唯一的名称。就像您想象的那样,您将在 each 函数的每次迭代中覆盖相同的两个属性。
  • @Emmet - 嗯......他们不是吗?对于我在成功函数中找到的每一行,我想创建一个带有标题和日期的对象,并将该对象存储在 calMap 中。这就是为什么我试图引用 calMap[0].title - 从第一个对象中获取标题。这更有意义?
【解决方案2】:

您的问题是 success 函数仅在您的 AJAX 请求完成时运行。如果您想安全地访问calMap,您需要在您的回调内部这样做。

【讨论】:

  • 我的成功函数运行良好。它所做的只是填充 calMap。之后其他函数应该可以访问该数据。
  • @tresstylez 是的,它运行良好,但是因为它是异步运行的,所以您无法确定它何时在您的主执行线程中完成。这就是存在回调的原因,因为它们仅在请求完成时被调用。
  • 我不认为这个假设是正确的。主线程调用 ajax 函数,填充了数组/对象,主线程能够访问数组(整个数组)。我只是不知道如何单独访问每个项目...我会更新我的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
相关资源
最近更新 更多