JavaScript数组 - 使用时长度为0但Chrome可以看到正确的长度

时间:2017-01-08 19:14:39

标签: javascript jquery arrays

这让我绝对不能成为初学者的JavaScript插件。

我有一个名为arrayA的数组,其中包含以下数据(在我的实际代码中,我使用[]声明arrayA,然后使用$ .getJSON来提取包含数据的文件):

 arrayA = [
    {
        "Key":  "Key1",
        "Value":  {
                      "info1":  "298431",
                      "info2":  "55.035",
                      "info3":  "11.375",
                  },
        "Name":  "Key1"
    }
]

在我的HTML页面中,我有一个脚本标记/部分,这是在那里定义的。在arrayA之后,我有一个名为funcA()的函数,我试着去做#34; stuff"这包括找到" Key1"的索引。举个例子。

当在行中执行console.log时,它总是报告为0,但在使用Chrome控制台检查长度时,它会报告正确数量的对象(8950)。

不确定是什么问题。潜在的变量范围或arrayA初始化和加载数据的方式?有人可以帮忙吗?

为了完整性:

<script type="text/javascript">
var arrayA = [];

$.getJSON('./source.json', function(data) {
    arrayA = data;                  
});

function funcA() {
    //Do stuff to find indexOf "Key1"
}
</script>

/ d

2 个答案:

答案 0 :(得分:2)

问题很可能是funcA()运行时,数据尚未可用。

试试这个:

<script type="text/javascript">
var arrayA = [];

$.getJSON('./source.json', function(data) {
    arrayA = data;                  
    console.log('Data was loaded', arrayA);
});

function funcA() {
    //Do stuff to find indexOf "Key1"
    console.log('funcA() ran');
}
</script>

然后你会看到事情发生的顺序。当然$.getJSON是异步函数,你不能依赖于总是以相同顺序发生的事情。因此,您应该查看promises或回调,而不是使用全局变量。

答案 1 :(得分:1)

您正在异步地将数据分配给arrayA - 当您第一次检查getJSON的回调函数尚未完成时。如果您想对数据进行操作,可以在回调中调用funcA

$.getJSON('./source.json', function(data) {
  arrayA = data;
  funcA();                 
});