首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能迭代我的数组/对象。Javascript,反应本机

不能迭代我的数组/对象。Javascript,反应本机
EN

Stack Overflow用户
提问于 2017-01-05 18:22:35
回答 1查看 6.1K关注 0票数 2

我真的不明白这里会发生什么。因此,我有一个函数,它接受一个2d数组和一个字符串,并遍历2d数组,并检查是否有任何子数组包含该字符串。但是不知怎么的,我不能迭代这个对象/数组,我真的很困惑它到底是什么。我在javascript中做了很多迭代。我尝试过-in,for-of (es6),C stlye(如下图),forEach(回调),map.毫无办法。

代码语言:javascript
复制
    _makeOrUpdateCase = (arrayOfArrays, str) => {
    console.log(arrayOfArrays); //returns the object/array shown in image below, expected
    console.log(typeof(arrayOfArrays)); //object
    console.log(Array.isArray(arrayOfArrays)); //true - huh? is this array or object??
    for (var i = 0; i < arrayOfArrays.length; i++) {
        console.log(arrayOfArrays[i]) //this does not work
        console.log(i); //nothing is printed out, as if the loop is simply ignored
    }

这是我得到的输出。您可以看到,我在循环中打印的内容没有执行。我知道javascript可能会很奇怪,但是拜托,这里到底发生了什么,我不知道google会怎么做。在这段代码中,我对数组和对象进行了多次迭代。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-05 18:31:32

tl;dr:您的循环很好,但是数组是空的,即使它出现在控制台中,而不是。

在填充数组之前,您正在记录/访问它。这一点从输出中的Array[0] (表示长度为0的数组)中可以看出,尽管它似乎有一个元素。如果您有一个异步进程(如Ajax ),但在异步进程完成之前正在记录/访问数组,则可能会发生这种情况。

如果您悬停在控制台中的小i上,它将告诉您该值是刚刚计算过的,即它显示了变量在单击三角形时所拥有的值,而不是当您在代码中记录值时。单击三角形时,异步进程可能已经完成。

但是,如果使用console.log(JSON.stringify(arrayOfArrays));,则会看到数组为空。

下面是演示此问题的简单示例(打开浏览器控制台并展开数组,至少在Chrome中工作):

代码语言:javascript
复制
// Open the browser console
var arr = [];
console.log(arr);
arr.push(1,2,3);

唯一的解决方案是只在异步进程完成后才调用_makeOrUpdateCase。由于您没有显示函数是如何/何时/在哪里调用的,所以这就是问题的全部内容。

相关:Is Chrome's JavaScript console lazy about evaluating arrays?

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41492035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档