在JavaScript / jQuery中覆盖/合并两个对象

时间:2013-09-07 02:02:41

标签: javascript jquery

我希望我的用户输入覆盖默认值,但如果数据不存在则默认填充空白。像这样:

var userInput={
    name:"Pat",
    color: "green"
}
var defaults={
    name:"Trevor",
    color: "blue",
    state: "washington"
}
var finalObject=mergeObjects(userInput,defaults);
//Should produce:
{
    name:"Pat",
    color: "green",
    state: "washington"
}

这种合并/覆盖是否可以与jQuery一起使用?我确实看到this question,但它适用于数组,并且覆盖,就像我需要它一样。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

jQuery的$.extend() method可以解决问题:

var finalObject = $.extend({}, defaults, userInput);

请注意$.extend()修改作为第一个参数传递的对象(并返回它),因此您可能希望传递一个空对象,以便defaultsuserInput不会换衣服。您可以根据需要传递任意数量的对象,并且它们将按照提供的顺序合并到第一个对象中(因此defaults会出现在userInput之前,以获得所需的结果。)

答案 1 :(得分:1)

您想要jQuery.extend,它明确用于合并两个或多个对象(参数的顺序与假设的mergeObjects方法相反):

var finalObject = $.extend(defaults, userInput);

finalObject // Object {name: "Pat", color: "green", state: "washington"}