2012-07-14 69 views
0

我正在过滤一个数组,它在Google Map(API V3)上形成一组标记:http://testdae.dialanexchange.com/testmap.aspx

它在组合中的所有工作正常进行或者分时度假度假村,并与一个或两个残疾人通道,并允许带宠物的私有财产权的。在所有这些情况下,我放入的调试警报显示了1642,这是用于标记的原始数组中的点数。

但是,当您选择“全部”,并选择“禁用访问”和“允许宠物”中的任一或全部时,在其正确显示结果后,取消选中任一复选框将导致警报显示这些过滤器已影响原始数组,过滤器部分底部的总数。它只能通过重新加载页面来重置。

我认为这个问题是在filterProperties()函数,但我无法看到它。

有什么我错过这里,是因为我一直盯着它,谷歌搜索和超过现在每天尝试不同的东西,得到它的工作?我认为$ .grep不应该影响原始数组。

回答

0

答案竟然是,这不是.grep $那是错但分配一个对象在JavaScript中另一个对象会导致如果一个人,要改变这两个对象,因为它们是有联系的通过参考相同的对象。解决方案是从原始中克隆一个新对象,从而保持原始对象的完整性。引用: -

1)What is the most efficient way to deep clone an object in JavaScript?

2)http://od-eon.com/blogs/bogdan/javascript-assignment-reference-vs-object-cloning/

3

$.grep()jQuery documentation

查找满足过滤器功能的数组的元素。 原始数组不受影响。

+3

这看起来像一个非常好的RTFM给我:P – 2012-07-14 13:49:51

+0

这的确是文档说什么。但在这种情况下,实际情况是如此。我正在使用名为“data”的原始数组,使用filterProperties()将其过滤到一个名为“newData”的新数组中,然后再由filterDisabledAccess()进行过滤。此时原始数组“数据”似乎已被更改。 – Craig 2012-07-14 13:51:19

+0

@Craig它发生在别的地方,而不是'$ .grep' – Esailija 2012-07-14 13:57:25