迭代一个常见的JavaScript集合?

时间:2012-06-05 14:39:44

标签: javascript jquery collections

所以我有一个常见的javascript集合,就是这种形式:

function populateCollection(){
    var Collection = new Array();
    Collection['A'] = 'Awesome';
    Collection['B'] = 'Better';
    Collection['C'] = 'Cool';
    return Collection;
}

在一个文件中(假设它叫做CommonLib.js)。

现在说我想将此文件保存为公共库,可以通过几个不同的JS文档访问(假设库非常大)。

从名为jsDoc1.js的文档中迭代这个集合的最佳方法是什么?

我给了它一个镜头:

<!DOCTYPE html>
<html lang="en">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
function dropdown() { 
    for(var i in languageCollection){
        alert(i);
    }
}
<script>
<body>
<input type="text" name="example" id="color" onclick="dropdown()">
</body>

但我一直得到一个未定义的languageCollection错误。我对jscript和jquery很新...对我有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

您不会将文件包含在您的收藏中。插入以下声明:

 <script src="/path/to/CommonLib.js"></script>

此外,您只定义了一个函数,该函数返回您的集合而没有全局对象。所以你首先必须调用该函数,例如

var myCol = populateCollection();

然后您可以像以下一样访问它:

for ( var i in myCol ) {
  if( myCol.hasOwnProperty( i ) {
    // do your stuff
    alert( i );
  }
}

另外,您可以更改函数以使用全局变量,这对每个范围都是可见的。

function populateCollection(){
    window.myNamespace = window.myNamespace  || {};
    window.myNamespace.Collection = {};
    window.myNamespace.Collection['A'] = 'Awesome';
    window.myNamespace.Collection['B'] = 'Better';
    window.myNamespace.Collection['C'] = 'Cool';
}

顺便说一句,你正在使用一个数组,好像它是一个对象。如果没有其他方面可以证明这一点,请将您的功能更改为以下内容:

function populateCollection(){
    return {
      'A': 'Awesome',
      'B': 'Better';
      'C': 'Cool'
    };
}