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可能很奇怪,但是请问这是怎么回事,我不知道该怎么办。我在这段代码中多次遍历数组和对象。
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控制台是否懒于评估数组?
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |