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;
}));
}
});
$.extend
涉及特性 - 它向左合并属性。也就是说,“righter”参数中出现的任何属性都会覆盖出现在任何“lefter”参数中的所有同名属性。 (结果是单个对象,与第一个参数是同一个对象:第一个输入对象是,突变为)。
$.merge
可以被认为是一个“concat” - 但是看到注释 - 因为它将两个数组(或数组类似的东西)连接在一起。 (结果是一个单一的阵列,其是相同的对象作为第一个参数:所述第一输入阵列突变。)
如果要项的集合,返回的项目(通常阵列的集合)。
例如return [objectA, objectB]
。
快乐编码。
谢谢,就是这样。我不知道返回一个集合是可能的。我所有的书都显示了一个物体的返回。另外,感谢您使用简短的jQuery课程。它的帮助。 –
如果我早点发现它,这会为我节省过去一小时的时间。我发现$ .extend改变了一个对象的属性(但不是元素的总数),$ .merge实际上会改变对象的长度。举个例子,你想添加一个按钮到一个.dialog(),你可以使用$ .merge,但是如果你想改变一个按钮的文本/功能,你可以使用$ .extend。 – Michael
“我如何获得两个阵列的组合内容?”正如我所看到的那样,问题是你*没有数组。 ;-) –
@ Ben Blank自从我刚刚开始2个月前开始,我不难知道更多的JavaScript,但是你甚至没有告诉我为什么它不是数组。下次,有帮助。 pst解决了我的问题 - 见下文。看看你是否可以成为一个有用的解决问题的人。 –