【问题标题】:Javascript Array Key RetrievalJavascript 数组密钥检索
【发布时间】:2009-12-29 00:16:14
【问题描述】:

我的 JavaScript 代码将大量数据存储在数组中。我想使用类似于我在下面写的内容来检索密钥。应该检索的密钥基于与页面相关的变量。以下代码不起作用。谁能帮我解决这个问题?

这是执行自动结合的脚本的一部分。 (在一个 div 中查找 SUBJECT,然后在另一个 div 中查找 VERB,然后通过从数组中检索共轭形式来共轭动词)

function getarray(Array,Key) {
            return Array[Key];
        }

它应该如何工作的示例:

verb = innerhtmlfromdiv;
subject = innerhtmlfromotherdiv;
    function getarray(Array,Key) {
           return Array[Key]; }
conjugatedverb = getarray(verb,subject);
htmltextbox.value = conjugatedverb;

【问题讨论】:

    标签: javascript arrays dynamic


    【解决方案1】:

    首先,你想要的是一个对象,而不是一个数组。我猜您是 javascript 新手,并且您以前的语言是 PHP 或 PERL,因此您认为您使用的是“关联数组”。

    基础知识:Javascript 中没有关联数组之类的东西。有 Objects,还有一个 Object 的非原始子类,称为 Array,它有一些处理数字命名的对象属性的方法,以及一个幻长属性。

    由于您要处理的键是字符串,而不是数字,所以数组没有用处。

    另一方面,Javascript 对象类似于 php 中的关联数组或 perl 中的哈希。 (但它们并不完全相同)。

    正如您毫无疑问地发现的那样,对于一个对象,您可以使用下标符号来访问某些属性,如

    verbs["go"] = "went";
    

    这相当于

    verbs.go = "went";
    

    一个常见的错误是认为点表示法仅用于对象,而下标表示法用于“关联数组”,因为这就是它在 PHP 中的工作方式。在 javascript 中,这两种符号是可以互换的。由于 Arrays 是 Object 的子类,因此上面的示例也适用于它们(但它们没有使用 Arrays 的任何特殊属性)。

    至于你的具体问题:

    你需要一个装满对象的对象。

    比如

    var verbs = {
       "do":{"Truck":"Drive","Blender":"Turn On","Bike":"Ride"},
       "take":{"Money":"Steal","Julie":"Accompany","Lever":"Pull}
    
    }
    

    那么你的功能是:

     function conjugate (verb, subject) {
             return verbs[verb][subject];
     }
    

    它的使用示例是

     conjugate("do","Truck") // returns "Drive"
    

    【讨论】:

      【解决方案2】:

      尝试将参数名称Array 更改为其他名称。 Array 是 javascript 中内置函数/对象的名称。

      【讨论】:

      • 傻我。忘了这是一个关键字。 头撞墙干杯!
      • 其实Array是一个函数,不是关键字。
      • 这应该没什么区别。如果您将“Array”作为参数,它会隐藏对内置数组的引用,并成为您传入的任何内容。我认为这里的问题更微妙。
      • 完全同意@Breton,Array 将在函数范围内被隐藏,名称更改没有任何区别,除非您尝试在该函数内部使用Array 构造函数当然……
      • 至少您会同意将变量命名为Array 或Object 是不好的做法。当您没有完整的源代码时,很难调试程序。我所能做的就是提供一条建议。
      【解决方案3】:

      我不太明白这个函数的意义。这就像写作:

      function getValue(var) {return var}
      

      为什么不以正常方式获取值而不将其包装在无用的函数中:

      conjugatedverb = verb[subject];
      htmltextbox.value = conjugatedverb;
      

      此外,当您声称从元素执行 innerHTML 并以某种方式获取对象而不是字符串时,您的代码没有意义。到底发生了什么?我认为你的问题甚至在这段代码之前就开始了。

      【讨论】:

      • 您可能希望使其成为一个函数,以抽象出一个人如何获得共轭动词的精确机制。不过,我和你一样对这件事感到困惑。
      猜你喜欢
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多