Javascript 数组长度不正确

Javascript 数组长度不正确,javascript,arrays,Javascript,Arrays,我有一个充满对象的数组。它总共包含23项,但是当我对它执行.length时,它返回20项 // Get the new routes var array = PostStore.getPostList(); console.log(array.objects); console.log(array.objects.length); “我的控制台”返回内容的图像: 这里出了什么问题?问题可能是阵列在您记录它的时间和您在控制台中打开它的时间之间发生了变化 要在记录时获取阵列,请克隆它: con

我有一个充满对象的数组。它总共包含23项,但是当我对它执行.length时,它返回20项

// Get the new routes
var array = PostStore.getPostList();

console.log(array.objects);
console.log(array.objects.length);
“我的控制台”返回内容的图像:


这里出了什么问题?

问题可能是阵列在您记录它的时间和您在控制台中打开它的时间之间发生了变化

要在记录时获取阵列,请克隆它:

console.log(array.objects.slice());
console.log(array.objects.length);
请注意,这不会防止数组元素属性的更改。如果你想把它们也冷冻起来,你需要一个深度克隆,这在大多数情况下是可能的

console.log(JSON.parse(JSON.stringify(array.objects.slice()));
但是,如果对象不可字符串化(循环对象、非常深的对象、读取时抛出异常的属性等),则这将不起作用。那样的话,你需要一个特定的克隆,就像我自己的克隆一样


在这种情况下,日志记录的另一种选择是调试。设置断点并在代码停止时查看对象。

是否
getPostList
返回
promise
?是否可以发布
PostStore
数据?看看我关于chrome控制台日志记录的回答。@RJK:这没有帮助。你是正确的。我认为阵列在我记录它和打开它之间发生了变化。你的解决方案似乎奏效了。在一分钟内将其标记为一个答案:)虽然可能是这样,但有趣的是,我以前从未遇到过这个问题,我会问这是一个chrome问题还是事实如果你在两个连续的行上使用array obj,它会导致问题吗?与其做所有的克隆和切片,不如打印
.toString()
@StoyanDekov,但这样你就看不见了everything@Pogrindis所有浏览器都会遇到此问题。原因是他们无法构建日志的深层克隆表示,因为它太重了。