2012-07-14 71 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