2011-06-28 46 views
1

我試過使用合併和擴展來合併自動完成ajax選項 - jQuery自動完成UI小部件中的數組。他們都工作,但不是他們應該的。在下面使用extend()的代碼中,只有objectB的內容顯示在下拉框中。如果我顛倒了參數的順序,則只會顯示objectA,即顯示第二個參數,但不顯示與第一個參數的組合。當我改變它合併(objectA,objectB)時,只有objectA的內容顯示。使用merge(),只顯示第一個參數,但不是兩者的組合。我如何獲得兩個數組的組合內容? (最終,對象B將是完全不同的,但我只是試圖讓這一概念的工作。)jQuery .extend()和.merge()給Autocomplete裏面的奇數結果

  $.ajax(
      { 
       url: "http://ws.geonames.org/searchJSON", 
       dataType: "jsonp", 
       data: geonamesData, 
       success: function(data) 
       { var objectA=null; 
        var objectB=null; 
        var objectC=null; 
        response($.map(data.geonames, function(item) 
        { objectA={ 
           label: item.name + (item.adminName2 ? ", " + item.adminName2 : "") + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName, 
           value: item.name + (item.adminName2 ? ", " + item.adminName2 : "") + (item.adminName1 ? ", " + item.adminName1 : ""), 
           name: item.name 
           }; 
         objectB={ 
           label: item.name + (item.adminName2 ? ", " + item.adminName2 : ""), 
           value: item.name + (item.adminName2 ? ", " + item.adminName2 : ""), 
           name: item.name 
           }; 
         objectC=$.extend({},objectA, objectB); 
         return objectC; 
        })); 
       } 
      }); 
+1

「我如何獲得兩個陣列的組合內容?」正如我所看到的那樣,問題是你*沒有數組。 ;-) –

+0

@ Ben Blank自從我剛剛開始2個月前開始,我不難知道更多的JavaScript,但是你甚至沒有告訴我爲什麼它不是數組。下次,有幫助。 pst解決了我的問題 - 見下文。看看你是否可以成爲一個有用的解決問題的人。 –

回答

2

$.extend涉及特性 - 它向左合併屬性。也就是說,「righter」參數中出現的任何屬性都會覆蓋出現在任何「lefter」參數中的所有同名屬性。 (結果是單個對象,與第一個參數是同一個對象:第一個輸入對象是,突變爲)。

$.merge可以被認爲是一個「concat」 - 但是看到註釋 - 因爲它將兩個數組(或數組類似的東西)連接在一起。 (結果是一個單一的陣列,其是相同的對象作爲第一個參數:所述第一輸入陣列突變。)

如果要項的集合,返回的項目(通常陣列的集合)。

例如return [objectA, objectB]

快樂編碼。

+0

謝謝,就是這樣。我不知道返回一個集合是可能的。我所有的書都顯示了一個物體的返回。另外,感謝您使用簡短的jQuery課程。它的幫助。 –

+0

如果我早點發現它,這會爲我節省過去一小時的時間。我發現$ .extend改變了一個對象的屬性(但不是元素的總數),$ .merge實際上會改變對象的長度。舉個例子,你想添加一個按鈕到一個.dialog(),你可以使用$ .merge,但是如果你想改變一個按鈕的文本/功能,你可以使用$ .extend。 – Michael