Javascript 我怎么能';像这样查找关联的数组?
我该怎么查字典呢Javascript 我怎么能';像这样查找关联的数组?,javascript,Javascript,我该怎么查字典呢 谢谢。正如错误明确指出的那样,urlMap[g]不存在。 您需要先创建它。正如错误明确指出的那样,urlMap[g]不存在。 你需要先创建它。很难判断你想做什么。您有一个包含两个条目的映射,键分别为“0”和“1”,但有一个循环在值0、1、2和3之间循环,然后使用这些值在映射中查找内容 引用的代码至少有三个问题: 您正试图访问一个对象的键“0”、“1”、“2”、和“3”,该对象只有键“0”和“1” 您正在一个循环中创建一个函数,它是变量i的闭包,因此以后只会看到i的值,然后调用闭
谢谢。正如错误明确指出的那样,
urlMap[g]
不存在。您需要先创建它。正如错误明确指出的那样,
urlMap[g]
不存在。你需要先创建它。很难判断你想做什么。您有一个包含两个条目的映射,键分别为
“0”
和“1”
,但有一个循环在值0、1、2和3之间循环,然后使用这些值在映射中查找内容
引用的代码至少有三个问题:
“0”
、“1”
、“2”
、和“3”
,该对象只有键“0”
和“1”
i
的闭包,因此以后只会看到i
的值,然后调用闭包。这是因为闭包在创建时会收到对变量的实时引用,而不是其值的副本。因此,所有的单击
处理程序函数将尝试使用键“4”
(循环完成后i
的值),该键在地图中不存在g
,因此成为了牺牲品urlMap[g] is undefined
[Break On This Error]
window.location.href = urlMap[g][$(this).val()];
urlMap={
'0':{'6b4247404960fd4e418d242f3b7f0412':'http://google.com', '123':'http://ibm.com'},
'1':{'4c27ffaef99b7a6dbe838b46bcc09779':'http://yahoo.com', '456':'http://abc.com'}
};
$(函数(){
对于(变量i=0;i<2;i++){
$(“#”+i.toString()+“.foo”).change(createHandler(i));
}
函数createHandler(索引){
返回函数(){
window.location.href=urlMap[index][$(this.val());
};
}
});
变化:
“0”
和“1”
,因为它们是它仅有的元素createHandler
函数来确保我们创建的处理程序结束于createHandler
的index
参数,而不是循环中的I
值。index
参数不会改变,而i
会随着循环的继续而改变g
,直接使用index
。属性名称总是字符串();任何时候你索引到一个对象,如果你提供的索引值是一个数字,它会被转换成一个字符串,所以你不必显式地做它(尽管你可以,如果你愿意的话)很难说出你想做什么。您有一个包含两个条目的映射,键分别为
“0”
和“1”
,但有一个循环在值0、1、2和3之间循环,然后使用这些值在映射中查找内容
引用的代码至少有三个问题:
“0”
、“1”
、“2”
、和“3”
,该对象只有键“0”
和“1”
i
的闭包,因此以后只会看到i
的值,然后调用闭包。这是因为闭包在创建时会收到对变量的实时引用,而不是其值的副本。因此,所有的单击
处理程序函数将尝试使用键“4”
(循环完成后i
的值),该键在地图中不存在g
,因此成为了牺牲品urlMap[g] is undefined
[Break On This Error]
window.location.href = urlMap[g][$(this).val()];
urlMap={
'0':{'6b4247404960fd4e418d242f3b7f0412':'http://google.com', '123':'http://ibm.com'},
'1':{'4c27ffaef99b7a6dbe838b46bcc09779':'http://yahoo.com', '456':'http://abc.com'}
};
$(函数(){
对于(变量i=0;i<2;i++){
$(“#”+i.toString()+“.foo”).change(createHandler(i));
}
函数createHandler(索引){
返回函数(){
window.location.href=urlMap[index][$(this.val());
};
}
});
变化:
“0”
和“1”
,因为它们是它仅有的元素createHandler
函数来确保我们创建的处理程序结束于createHandler
的index
参数,而不是循环中的I
值。index
参数不会改变,而i
会随着循环的继续而改变g
,直接使用index
。属性名称总是字符串();任何时候你索引到一个对象,如果你提供的索引值是一个数字,它会被转换成一个字符串,所以你不必显式地做它(尽管你可以,如果你愿意的话)嗯,您的
for
语句从0迭代到3,但是您的urlMap
对象只有'0'
和'1'
成员……我以为只有在发生更改时才调用更改函数。这是一张精选表格,如果我没有提到的话,很抱歉。当用户从选项中选择某个内容时,其中一个选项将匹配urlMap并重定向用户。此外,元素ID不能以数字开头。@SLaks AFAIK它们可以在HTML5中使用。在任何情况下,他都有一个“循环中的闭包”问题。@Alnitak:你说得对;我没听清楚。嗯,您的for
语句从0迭代到3,但是您的urlMap
对象只有一个'0'
和urlMap = {
'0': {'6b4247404960fd4e418d242f3b7f0412': 'http://google.com', '123':'http://ibm.com'},
'1': {'4c27ffaef99b7a6dbe838b46bcc09779' : 'http://yahoo.com', '456':'http://abc.com'}
};
$(function() {
for (var i = 0; i < 2; i++){
$("#"+i.toString()+".foo").change(createHandler(i));
}
function createHandler(index) {
return function() {
window.location.href = urlMap[index][$(this).val()];
};
}
});