无法迭代我的数组/对象。 Javascript,React Native

时间:2017-01-05 18:22:36

标签: javascript arrays loops reactjs javascript-objects

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

    _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可能很奇怪,但是这里发生了什么,我不知道谷歌是什么。我已经在这段代码中多次遍历数组和对象。 enter image description here

1 个答案:

答案 0 :(得分:4)

tl; dr:你的循环很好,但即使它出现在控制台中,它也是空的。

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

如果将鼠标悬停在控制台中的小i上,它会告诉您该值评估,即它显示变量在您点击时的值三角形,而不是在代码中记录值时。当您单击三角形时,异步过程可能已完成。

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

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

&#13;
&#13;
// Open the browser console
var arr = [];
console.log(arr);
arr.push(1,2,3);
&#13;
&#13;
&#13;

唯一的解决方案是在异步过程完成后仅调用_makeOrUpdateCase 。由于您没有显示调用函数的方式/时间/位置,因此可以说明这个问题。

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