Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我怎么能';像这样查找关联的数组?_Javascript - Fatal编程技术网

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()];
           };
        }
    });