jQuery .extend()和.merge()给Autocomplete里面的奇数结果

问题描述:

我试过使用合并和扩展来合并自动完成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解决了我的问题 - 见下文。看看你是否可以成为一个有用的解决问题的人。 –

$.extend涉及特性 - 它向左合并属性。也就是说,“righter”参数中出现的任何属性都会覆盖出现在任何“lefter”参数中的所有同名属性。 (结果是单个对象,与第一个参数是同一个对象:第一个输入对象是,突变为)。

$.merge可以被认为是一个“concat” - 但是看到注释 - 因为它将两个数组(或数组类似的东西)连接在一起。 (结果是一个单一的阵列,其是相同的对象作为第一个参数:所述第一输入阵列突变。)

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

例如return [objectA, objectB]

快乐编码。

+0

谢谢,就是这样。我不知道返回一个集合是可能的。我所有的书都显示了一个物体的返回。另外,感谢您使用简短的jQuery课程。它的帮助。 –

+0

如果我早点发现它,这会为我节省过去一小时的时间。我发现$ .extend改变了一个对象的属性(但不是元素的总数),$ .merge实际上会改变对象的长度。举个例子,你想添加一个按钮到一个.dialog(),你可以使用$ .merge,但是如果你想改变一个按钮的文本/功能,你可以使用$ .extend。 – Michael