如果我理解正确的话,ECMAScript 5为Array
类型提供了filter()
原型,但没有为Object
类型提供。
在JavaScript中,我该如何为Object
实现一个filter()
函数呢?
假设我有以下这个对象:
var foo = {
bar: "Yes"
};
我想编写一个适用于 Object
的 filter()
函数:
Object.prototype.filter = function(predicate) {
var result = {};
for (key in this) {
if (this.hasOwnProperty(key) && !predicate(this[key])) {
result[key] = this[key];
}
}
return result;
};
这段代码在下面的演示中可以运行,但是当我将其添加到使用jQuery 1.5和jQuery UI 1.8.9的网站时,在FireBug中会出现JavaScript错误。
Object.prototype.filter = function(predicate) {
var result = {};
for (key in this) {
if (this.hasOwnProperty(key) && !predicate(this[key])) {
console.log("copying");
result[key] = this[key];
}
}
return result;
};
var foo = {
bar: "Yes",
moo: undefined
};
foo = foo.filter(function(property) {
return typeof property === "undefined";
});
document.getElementById('disp').innerHTML = JSON.stringify(foo, undefined, ' ');
console.log(foo);
#disp {
white-space: pre;
font-family: monospace
}
<div id="disp"></div>
Object.prototype
的脚本,存在一些不明确的历史记录:http://bugs.jquery.com/ticket/2721 - Crescent Fresh