Javascript 从对象中删除额外属性
从默认对象中未定义的对象中删除任何附加属性的最佳方法是什么Javascript 从对象中删除额外属性,javascript,jquery,object,Javascript,Jquery,Object,从默认对象中未定义的对象中删除任何附加属性的最佳方法是什么 var defaults = { color : 'blue', size: 9, price : 40.00, instock : true }, newItem = { color: 'red', size : 4, price : 20.00 extra : invalid // discard this extra1 : invalid // d
var
defaults = {
color : 'blue',
size: 9,
price : 40.00,
instock : true
},
newItem = {
color: 'red',
size : 4,
price : 20.00
extra : invalid // discard this
extra1 : invalid // discard this
},
item = $.extend( defaults, newObject ) ;
所需输出…
{
color : 'red',
size: 4,
price : 20.00,
instock : true
}
在调用$.extend之前,请输入以下内容
for(variable in newItem) {
if(!(variable in defaults)) {
delete newItem[variable];
}
}
这将在
newItem
中的每个键上循环,并检查它是否也是默认值中的键。请注意,这将修改newItem
,因此如果不需要这样做,则需要进行一些调整。您可以将Object.keys(默认值)
减少为包含覆盖值或默认值的对象:
var默认值={
颜色:“蓝色”,
尺码:9,
价格:40.00,
英斯托克:是的
},
新项目={
颜色:“红色”,
尺寸:4,
价格:20.00,
额外:“无效”,
附加条款1:“无效”
};
函数getOverrides(默认值,obj){
返回Object.keys(默认值).reduce(函数(结果,cur){
结果[cur]=对象中的cur?对象[cur]:默认值[cur];
返回结果;
}, {});
}
log(getOverrides(默认值,newItem))代码>仅合并存在于默认值对象中的属性:(简单且支持旧浏览器)
var默认值={
颜色:“蓝色”,
尺码:9,
价格:40.00,
英斯托克:是的
};
var newItem={
颜色:“红色”,
尺寸:4,
价格:20.00,
额外:'无效',//放弃此
extra1:'无效'//放弃此
};
var result={};
对于(默认情况下的var i){
结果[i]=newItem.hasOwnProperty(i)?newItem[i]:默认值[i];
}
控制台日志(结果)代码>根据此性能比较:
最有效的方法是:
for(attr in newItem) {
if(defaults[attr] === undefined)
delete newItem[attr];
}
我一直在玩的一些代码可能很有趣,并且是一个如何在您的问题中使用它的示例
“严格使用”;
var slice=Function.call.bind(Array.prototype.slice);
var reflectAssign=功能分配(目标){
返回片(参数,1).every(函数(源){
if(source==null){
返回true;
}
var对象=对象(源);
返回Reflect.ownKeys(对象).every(函数(键){
返回Reflect.set(目标、键、对象[key]);
});
});
};
var reflectAssignHas=功能(目标){
var targetKeys=Reflect.ownKeys(目标);
返回片(参数,1).every(函数(源){
if(source==null){
返回true;
}
var对象=对象(源);
返回targetKeys.every(函数(键){
返回Reflect.has(object,key)?Reflect.set(target,key,object[key]):true
});
});
};
var默认值={
颜色:“蓝色”,
尺码:9,
价格:40.00,
英斯托克:是的
};
var newItem={
颜色:“红色”,
尺寸:4,
价格:20.00,
额外:'无效',//放弃此
extra1:'无效'//放弃此
};
var item={};
log(reflectsign(项,默认值));
log(reflectAssignHas(item,newItem));
控制台日志(项目)代码>
so的可能重复使用减少或删除