Javascript 有没有办法使$.extend不向目标传播空值属性
下面是一行已执行代码,其中设置了方法中的defaultOptions列表 到一堆空值,还有一些例外Javascript 有没有办法使$.extend不向目标传播空值属性,javascript,jquery,Javascript,Jquery,下面是一行已执行代码,其中设置了方法中的defaultOptions列表 到一堆空值,还有一些例外 var passedOptions = $.extend({},defaultOptions, configOptions); defaultOptions = { "method":"POST", "url":"", "params":null, "data":null, "headers":null, "xsrfHeaderName":nul
var passedOptions = $.extend({},defaultOptions, configOptions);
defaultOptions =
{
"method":"POST",
"url":"",
"params":null,
"data":null,
"headers":null,
"xsrfHeaderName":null,
"xsrfCookieName":null,
"transformRequest":null,
"transformResponse":null,
"cache":false,
"timeout":null,
"withCredentials":false,
"reqsponseType":null
}
configOptions =
{
"url":"someurl/blahblah",
"data": "username":"me@email.com",
"email":"me@email.com"
}
这是我想要的PasseOptions的样子
passOptions =
{
"method":"POST",
"url":"someurl/blahblah",
"data": "username":"me@email.com",
"email":"me@email.com"
"cache" : false,
"withCredentials" : false
}
基本上是这两者的组合,但具有空值的属性不会复制到目标。这可能吗???您可以手动执行:
var passedOptions={};
for(var i in defaultOptions){
if(defaultOptions[i] != null){
passedOptions[i]=defaultOptions[i];
}
}
for(var i in configOptions){
if(configOptions[i] != null){
passedOptions[i]=configOptions[i];
}
}
我找到了答案,尽管它不忽略空值,但它允许将对象向下合并到目标,同时忽略具有未定义值的属性。将所有空值替换为未定义的无效值
想到这一点,我只是不知道jquery中是否有一些本机的东西可以做到这一点,因为jquery应该忽略null和未定义的键(),但它没有,可能是因为一个错误,ticket似乎读取到它将忽略$的参数。扩展到如果configOptions本身为null,那么它将忽略它,但我考虑的是更深层的实现,它忽略了最终目标的任何objectN中的null子属性,因此目标是两个对象的合并,减去所有null或未定义的值属性。