我们在一个UI密集度较低的项目上使用jQuery,而在其他项目上一直在使用ExtJS。无论如何,我很好奇是否有任何流行的库,如ExtJS、jQuery或其他库,提供了“修剪”对象的实用程序?我的意思是,如果键不包含值,则删除键。
我设计了我自己的(简单的)实现,如下所示,所以这没什么大不了的。尽管我很好奇,但我相信这通常是有用的。我已经在谷歌上搜索了"jquery prune object“,但似乎没有值得研究的结果,当然我可能是错的;)
function pruneObj(obj) {
var empty = [];
for (var attr in obj) {
if (!obj[attr]) {
empty.push(attr); //rather than trying to delete the element in place
}
}
for (var i=0, n=empty.length; i<n; i++) {
delete(obj[empty[i]]);
}
return obj;
}发布于 2009-08-13 17:12:27
所以:
var obj = { hasFoo: false, count: 0 }(在调用prunObj(obj)之后)是否只有{}
我不认为有任何库会假设什么值是“空的”。它是一个破坏性/变化性太强的函数,不能作为一组标准的实用函数的一部分。
许多库或浏览器都有一个功能,可以从数组中过滤出不符合特定条件的项。例如filter
list.filter(function(item){
return !item.foo
})将筛选出list中在foo属性中具有"falsey" value的项。
编辑
进一步考虑,jQuery和Prototype似乎都认为undefined是“空的”。jQuery的extend函数可以用undefined实现我想要的功能,尽管使用的语法略有不同,并且不会改变传递的参数:
A = { hasFoo: false, count: 0, foo: null, bar: undefined };
B = jQuery.extend({}, A); // B = { hasFoo: false, count: 0, foo: null }将"jQuery"与"Object"替换为原型等效项。
https://stackoverflow.com/questions/1273279
复制相似问题