Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 包含对象的数组长度错误_Javascript_Arrays_Object_Loops - Fatal编程技术网

Javascript 包含对象的数组长度错误

Javascript 包含对象的数组长度错误,javascript,arrays,object,loops,Javascript,Arrays,Object,Loops,我有这样一个数组: errors=[{…},{…},{…}] 它是数组的实例,但对于.length,它只返回1 相关代码: if(data.error){ errors.push({'element':ele,error:data.error}); } //Above is looped a few times and there are N number of errors now inside console.log(errors) //Returns 2+ objects like

我有这样一个数组:

errors=[{…},{…},{…}]

它是
数组的
实例,但对于
.length
,它只返回1

相关代码:

if(data.error){
  errors.push({'element':ele,error:data.error});
}

//Above is looped a few times and there are N number of errors now inside

console.log(errors) //Returns 2+ objects like {...}, {...}
console.log(errors.length) //Returns 1
对于Uzi和Muirbot,以下是错误数组:

[
Object
element: b.fn.b.init[1]
error: "You must enter "example" into the field to pass"
__proto__: Object
, 
Object
element: b.fn.b.init[1]
error: "Crap!"
__proto__: Object

这是正确的,此代码:

var errors = new Array();

errors.push({'element':'ele', error:'data.error'});

…将一个对象添加到数组中。该对象有两个属性。

您的代码可能不是按预期的顺序执行的。也就是说,当您同时记录
错误
错误。长度
错误
只包含一个对象。但在此之后,您将添加到
errors
数组,只有在添加之后,您才能查看控制台。此时,您可以在
errors
中看到一个更大的数组,原因有二:首先,您的实际代码不是记录
errors
,而是记录一些包含
errors
的对象。在这种情况下,控制台显示是实时的,它将显示的不是当时
错误中的内容,而是现在的内容。或者,控制台可能只是需要一些时间来记录
错误

如果没有更多的代码,我无法确定是否是这样。但是您可以通过替换
console.log(错误)来验证它带有
console.log(错误[1])。如果错误实际上当时只有1个长度,它将记录
未定义的

它是数组对象还是类似的对象

阵列可以工作:

> a = [{a:1}, {b:2}]
[Object, Object]
> a.length
2
您必须提供更多的代码

现在您已经提供了相关的代码,正确的答案是(顺便说一句,被否决了)

Array.push添加了一个元素,对象可能有多个键,但它们仍然是一个对象,因此您的实际情况与您的原始示例不同,这当然有效


另一种可能性:

> a = []
[]
> a.length = 2
2
> a
[]
> a.length
2
> a instanceof Array
true

问题是Chrome的Web Inspector的console.log是一个异步事件。因此,长度是一个属性查找,所以它立即返回,但是包含两个项目的对象被延迟,直到其他事件触发


将来,我和其他有此问题的人应该使用
调试器改为。

您能添加复制此案例的代码示例吗?您能准确粘贴console.log(错误)的输出吗?谢谢您发布示例,但发布测试案例通常更有帮助,这样它才是可复制的。如果没有人知道为什么我可以发布所有的代码,但是它非常大,因为它是内部库的一部分。我觉得上面的代码应该足够了,因为它基本上都发生在那里。但是是的,我会在10分钟后发布一个测试用例mins@Oscar龙芯:如果不可能的话,那么你可以制作一个控制台的屏幕截图,在其中你可以显示两个日志的结果吗?复制文本可能会消除重要的细节,嗯?.push()运行了12100次。无论我将新元素推入多少次。lenth==1这不是您的问题所述。是的,[1]将返回undefined,因为长度仅为1。奇怪的是,如果每次错误被推到内部时我都记录错误,那么它会正确地记录错误。如果你说你刚刚测试了它并得到了结果,那么你就得到了答案。对
控制台.log
(在您的示例中)的两个调用都是在
errors
实际上只有1长时执行的,并且您稍后会推送错误(这就是为什么推送错误后立即进行日志记录会返回正确的结果)。但问题是
.push()
被多次调用:“上面循环了几次,现在里面有N个错误”。然后这是一个伪数组,这是我的第一个猜测;javascript中的对象是动态的,所以你可以创建一个数组并覆盖长度,但在这一点上,我猜问题本身有问题。