无法遍历我的数组/对象。Javascript,React Native

Tam*_*ine 1 javascript arrays loops javascript-objects reactjs

我真的不明白这里可能会发生什么。所以我有一个函数,该函数需要一个2d数组和一个字符串,并遍历2d数组并检查是否有任何子数组包含该字符串。但是我不能以某种方式遍历这个对象/数组,而对于它的真正含义我感到很困惑。我在javascript中做了很多迭代。我已经尝试了for-in,for-of(es6),C stlye(如下所示),forEach(回调),地图...没有任何效果。

    _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
    }
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出。您可以看到我在循环中打印的内容没有执行。我知道javascript可能很奇怪,但是请问这是怎么回事,我不知道该怎么办。我在这段代码中多次遍历数组和对象。在此处输入图片说明

Fel*_*ing 5

tl; dr:您的循环很好,但即使在控制台中出现该数组,数组也为空。

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

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

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

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

// Open the browser console
var arr = [];
console.log(arr);
arr.push(1,2,3);
Run Code Online (Sandbox Code Playgroud)

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


相关:Chrome的JavaScript控制台是否懒于评估数组?