作为一个 JavaScript 新手,这让我简直要发疯了。
我有一个名为 arrayA 的数组,其中包含以下数据(在我的实际代码中,我使用 [] 声明 arrayA,然后使用 $.getJSON 获取包含数据的文件):
arrayA = [
{
"Key": "Key1",
"Value": {
"info1": "298431",
"info2": "55.035",
"info3": "11.375",
},
"Name": "Key1"
}
]
在我的 HTML 页面中,我有一个脚本标记/部分,它是在那里定义的。在 arrayA 之后,我有一个名为 funcA() 的函数,我在其中尝试执行“操作”,其中包括查找“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
最佳答案
问题很可能是当 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
是一个异步函数,你不能依赖事情总是以相同的顺序发生。因此,您应该研究 Promise 或回调,而不是使用全局变量。
关于JavaScript 数组 - 使用时长度为 0,但 Chrome 可以看到正确的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41536720/