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中的对象是动态的,所以你可以创建一个数组并覆盖长度,但在这一点上,我猜问题本身有问题。