[英]Do any prevalent Javascript frameworks provide a utility for pruning objects?
我们在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;
}
所以:
var obj = { hasFoo: false, count: 0 }
(在调用prunObj(obj)
)将只是{}
吗?
我认为那里没有任何图书馆会假设什么值被视为“空”。 它太具有破坏性/变异性,无法包含在一组标准的实用程序功能中。
许多库或浏览器都提供了一种从不符合特定条件的阵列中筛选出项目的功能。 例如filter
:
list.filter(function(item){
return !item.foo
})
将过滤出list
中在foo
属性中具有“ falsey”值的项目。
编辑 :
进一步考虑,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"
交换为等效的原型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.