JavaScript:对象的filter()

如果我理解正确,ECMAScript 5具有类型的filter()原型Array,但没有Object类型的原型。

如何在JavaScript中实现filter()for for Object

假设我有这个对象:

var foo = {

bar: "Yes"

};

我想写一个filter()适用于Objects的:

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.prototype

Object.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

回到顶部