JavaScript:对象的filter()
如果我理解正确,ECMAScript 5具有类型的filter()
原型Array
,但没有Object
类型的原型。
如何在JavaScript中实现filter()
for for Object
?
假设我有这个对象:
var foo = { bar: "Yes"
};
我想写一个filter()
适用于Object
s的:
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
。
您的代码将发生可怕的事情。事情会破裂。您正在扩展 所有 对象类型,包括对象文字。
您可以尝试以下简单示例:
// Extend Object.prototypeObject.prototype.extended = "I'm everywhere!";
// See the result
alert( {}.extended ); // "I'm everywhere!"
alert( [].extended ); // "I'm everywhere!"
alert( new Date().extended ); // "I'm everywhere!"
alert( 3..extended ); // "I'm everywhere!"
alert( true.extended ); // "I'm everywhere!"
alert( "here?".extended ); // "I'm everywhere!"
而是创建一个传递对象的函数。
Object.filter = function( obj, predicate) { let result = {}, key;
for (key in obj) {
if (obj.hasOwnProperty(key) && !predicate(obj[key])) {
result[key] = obj[key];
}
}
return result;
};
以上是 JavaScript:对象的filter() 的全部内容, 来源链接: utcz.com/qa/436290.html