jQuery的/ JavaScript的 - 覆盖存在的价值

我有类似这样:

... meta: { 'orderby' : 'firstname', 'page' : 1, 'per' : 10 } ...

当我用ajax发送请求,我的回应的一部分,包含了一些这个元数据。 所以我用新的东西覆盖。 服务器可能发送回是这样的:

meta: { 'page' : 1, 'per' : 10 }

的问题是,它覆盖orderby待键undefined 。 我不想让服务器发回的一切,我怎么能离开键的值,如果该键没有发回?

--------------解决方案-------------

正如你说你正在使用jQuery,您可以使用它的extend功能:

jQuery.extend(originalMeta, returnedMeta);

这将仅覆盖在所述目标的属性( originalMeta从源(具有属性,在上述) returnedMeta在上述)实际存在。 (无需分配功能的结果originalMeta ,它修改的地方。)

这也是容易死人不依赖于jQuery的:

var name;
for (name in returnedMeta) {
if (returnedMeta.hasOwnProperty(name)) {
originalMeta[name] = returnedMeta[name];
}
}

一个使用for..in通过所有(枚举)性质在循环来returnedMeta ,过滤掉任何从它的原型继承(它可能没有继承任何,但是...),以及存在复制那些值到originalMeta

您可以使用extend()

var meta = $.extend(meta, {
'page': 1,
'per': 10
});

TJ克劳德指出,第一个参数的对象被修改,无需返回(虽然它会工作以及)。

的问题是,它覆盖的OrderBy键未定义

它不会覆盖属性时,它会覆盖整个Object 。 当您访问的Object不存在的财产,你会得到undefined

分类:JavaScript的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.682 (s). 10 q(s)