如何访问此javascript映射对象中的数据?

如何访问此javascript映射对象中的数据?,javascript,jquery,object,properties,map,Javascript,Jquery,Object,Properties,Map,我正在进行一个返回XML数据的AJAX调用,这是我的“success:”函数(回调): calMap是在函数外部声明的全局javascript对象 var calMap = {}; 我想做的是创建一个函数,在这里我可以传入一个标题,让它搜索calMap该标题,如果找到,将返回特定对象,我将能够访问该对象的日期属性 问题是,我似乎无法访问插入calMap对象的数据。首先,我只想打印地图。尝试评估它,尝试提醒calMap[0],尝试提醒calMap[0]。标题,但没有。有人能帮我吗?谢谢 更新:

我正在进行一个返回XML数据的AJAX调用,这是我的“success:”函数(回调):

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

var calMap = {};
我想做的是创建一个函数,在这里我可以传入一个标题,让它搜索calMap该标题,如果找到,将返回特定对象,我将能够访问该对象的日期属性

问题是,我似乎无法访问插入calMap对象的数据。首先,我只想打印地图。尝试评估它,尝试提醒calMap[0],尝试提醒calMap[0]。标题,但没有。有人能帮我吗?谢谢

更新: 我想这样做:

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
),这有意义吗

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

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

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;
};
函数hasCalDate(代码)
{
var匹配=”;

对于(var f=0;f而言,您的问题是只有在AJAX请求完成时才会运行
success
函数。如果您希望安全地访问
calMap
,则需要在回调内部执行此操作。

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

然后,在您的
每个
函数中,我猜您想要更像

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

尝试使用console.log(calMap)在chrome或firebug First中哦,是的,控制台很棒。结果证明我得到了一个对象数组。我的成功函数运行良好。它所做的只是填充calMap。其他函数应该可以访问该数据。@tresstylez是的,它运行良好,但因为它异步运行,所以您无法确定它何时完成在主执行线程中。这就是回调存在的原因,因为它们只在请求完成时被调用。我认为这一假设不正确。主线程调用ajax函数,数组/对象被填充,主线程能够访问数组(整个数组)。我只是不知道如何单独访问每个项目…我会更新我的代码。谢谢Emmett,这是可行的——但我不使用直接数组,因为我认为搜索数组和对象的效率会更低。我不需要在整个数组中循环查找标题,我只需要使用一个键访问地图,就可以获得properties,对吗?@tres在你问题的末尾,你说你正在提醒
calmap[0]
calmap[0]。title
(这是数组语法),因此我推断您试图创建一个数组。另外,您希望使用什么类型的键访问属性?@Emmet-是的,很抱歉造成混淆。我只是尝试了不同的东西,但肯定想使用“对象”。我想说:calMap['myTitle']并获取与之匹配的特定对象(如果存在)的calMap.date访问权限。我将更新我的帖子以了解我想做的事情……给我一点时间。@tres您的属性必须具有唯一的名称。按照您的想象,您将在
每个
函数的每次迭代中覆盖相同的两个属性。@Emmet-Hmm…它们不是吗?对于我在success函数中找到的每一行,我都希望覆盖它们创建一个带有标题和日期的对象,并将该对象存储在calMap中。这就是我尝试引用calMap[0]的原因。标题--从第一个对象获取标题。这更有意义吗?
var calMap = [];
calMap.push({
    title: $(this).attr("ows_Title"),
    date: $(this).attr("ows_EventDate")
});