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

IT技术 javascript arrays loops reactjs javascript-objects
2021-04-10 21:53:24

我真的不明白这里会发生什么。所以我有一个函数,它接受一个二维数组和一个字符串,并遍历二维数组并检查是否有任何子数组包含该字符串。但不知何故,我无法迭代这个对象/数组,我真的很困惑它到底是什么。我在 javascript 中做了很多迭代。我试过 for-in、for-of (es6)、C stlye(如下所示)、forEach(callback)、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 可能很奇怪,但是来吧这里发生了什么,我不知道要谷歌什么。我在这段代码中多次迭代数组和对象。在此处输入图片说明

1个回答

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);

唯一的解决方法是调用_makeOrUpdateCase只有异步过程完成。由于您没有显示调用函数的方式/时间/位置,因此关于该问题只能说这些。


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

就是这样!在我对 firebase 的调用中移动了_makeOrUpdateCase对回调的.done调用。感谢您花时间解释。很高兴知道这些小迹象表明某些异步内容已启动,例如 Array[0] 被记录到控制台。将来我也会牢记这一点。如果您对重命名此问题的标题有任何想法以帮助将来可能遇到这种情况的其他人,请告诉我。
2021-06-21 21:53:24