无法遍历我的数组/对象。 Javascript,React Native [重复]
Posted
技术标签:
【中文标题】无法遍历我的数组/对象。 Javascript,React Native [重复]【英文标题】:Can't iterate over my array/object. Javascript, React Native [duplicate] 【发布时间】:2017-05-20 09:49:46 【问题描述】:我真的不明白这里会发生什么。所以我有一个函数,它接受一个二维数组和一个字符串并遍历二维数组并检查是否有任何子数组包含该字符串。但不知何故,我无法迭代这个对象/数组,我真的很困惑它实际上是什么。我在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 可能很奇怪,但是来吧,这里发生了什么,我不知道要谷歌什么。我在这段代码中多次迭代数组和对象。
【问题讨论】:
看起来arrayOfArrays
的形式是 [["-K_j43GqrmowwLJPPlm2", "#CDD"]]
"true - 嗯?这个数组还是对象??" 数组就是对象。
Google 说“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
。由于您没有显示函数的调用方式/时间/位置,因此这就是问题的全部内容。
相关:Is Chrome's JavaScript console lazy about evaluating arrays?
【讨论】:
就是这样!我将_makeOrUpdateCase
的调用移至回调.done
接受我对firebase 的调用。感谢您花时间解释。很高兴知道这些小迹象表明某些异步内容已启动,例如将 Array[0] 记录到控制台。我也会牢记这一点。如果您对重命名此问题的标题有任何想法以帮助其他可能遇到这种情况的人,请告诉我。以上是关于无法遍历我的数组/对象。 Javascript,React Native [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何遍历类对象数组并在 JavaScript 中使用函数 [重复]