为什么我不能像这样查找关联的数组
How come I can't lookup associated array like this?
urlMap = {
'0': {'6b4247404960fd4e418d242f3b7f0412': 'http://google.com', '123':'http://ibm.com'},
'1': {'4c27ffaef99b7a6dbe838b46bcc09779' : 'http://yahoo.com', '456':'http://abc.com'}
};
$(function() {
var l = new Array(1,2,3,4);
for (var i = 0; i < l.length; i++){
$("#"+i.toString()+".foo").change(function() {
g = i.toString();
window.location.href = urlMap[g][$(this).val()];
})}});
我尝试使用 urlMap[i] 它不起作用。当我对urlMap['0']进行硬编码时,它可以工作。
从萤火虫,我看到这个
urlMap[g] is undefined
[Break On This Error]
window.location.href = urlMap[g][$(this).val()];
我应该如何查找字典?
谢谢。
很难说你想做什么。您有一个包含两个条目的映射,键分别为 "0"
和 "1"
,但您有一个循环遍历值 0、1、2 和 3,然后使用这些值在映射中查找内容。
引用的代码至少存在三个问题:
-
您正在尝试访问仅具有键
"0"
和"1"
的对象的键"0"
、"1"
、"2"
和"3"
。 -
您正在循环中创建一个函数,该函数是变量
i
上的闭包,因此以后只能看到i
的值,然后调用闭包。这是因为闭包在创建时接收对变量的实时引用,而不是其值的副本。因此,所有click
处理程序函数都将尝试使用键"4"
(循环完成后的i
值(,这在您的映射中不存在。 -
你没有在任何地方宣布
g
,所以成为隐性全球恐怖的牺牲品。
这是我对你实际想要做的事情的最佳猜测:
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()];
};
}
});
变化:
我只尝试访问地图
"0"
和"1"
的元素,因为这些是它拥有的唯一元素。我使用
createHandler
函数来确保我们创建的处理程序关闭index
参数以createHandler
,而不是循环中的i
值。index
参数不会改变,而i
(如我所提到的(会随着循环的继续而改变。我摆脱了我们不需要的
g
,直接使用index
。属性名称始终是字符串(即使对象是"数组"(;任何时候你索引到一个对象,如果你提供的索引值是一个数字,它就会变成一个字符串,所以你不必显式地这样做(尽管如果你愿意,你可以这样做(。
正如错误明确指出的那样,urlMap[g]
不存在。
您需要先创建它。
相关文章:
- 多维关联数组的最后一个索引
- node.js/javascript/couchdb视图到关联数组似乎不起作用
- 具有关联数组数据集的D3.js表
- 后关联数组使用jquery ajax
- 返回一个关联数组,而不是mongoose中的文档数组
- 如何在 Angular JS 中从关联数组创建多个复选框
- 存储在变量中的关联数组中的访问键
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- 在主要的JavaScript引擎中,在JavaScript关联数组(动态对象属性)中检索/插入的复杂性是多少
- 关联数组,并使用父数组d作为selection.data()的源数组
- 获取关联数组的标签
- JavaScript:如何在最接近值的关联数组中查找键
- 单击时显示关联数组的元素
- 关联数组 - 使用图像滑块显示键值
- Javascript从关联数组中查找最低数字(气泡排序方法)
- AngularJS过滤器不适用于我的数据:关联数组
- 获取关联数组中当前函数的键
- 如何按一个仍保持字母顺序的特性值(另一个特性值)对关联数组进行排序
- 正在检查JavaScript中是否存在关联数组
- 将数据附加到关联数组或维度数组