当前位置: 首页 > 面试题库 >

JavaScript:对象的filter()

朱欣荣
2023-03-14
问题内容

如果我理解正确,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;
};


 类似资料:
  • 主要内容:JS 创建对象,访问对象的属性,设置修改对象的属性,JS 删除对象的属性,JS 调用对象的方法JavaScript 是一种面向对象的编程语言,在 JavaScript 中几乎所有的东西都是对象。因此,要想有效的使用 JavaScript,首先需要了解对象的工作原理以及如何创建并使用对象。 我们可以将对象看作是一个属性的无序集合,每个属性都有一个名称和值(键/值对)。通过《 JS数据类型》一节我们知道,数组是值的集合,每个值都有一个数字索引(从零开始,依次递增)。对象类似与数组,不同的是

  • 对象 指包含数据和用于处理数据的指令的数据结构. 对象有时也指现实世界中的一些事, 例如在赛车游戏当中一辆车或者一幅地图都可以是一个对象。—— MDN JavaScript 中的对象由属性和方法组成。 属性可以是任意 JavaScript 中的数据类型,方法则是一个函数。 1. 创建对象 对象的格式如下: { prop1: 'value1', prop2: 666, prop3: {}

  • 问题内容: 就像是 这是我想象的格式,但事实并非如此。什么会退回到对象的父级? 问题答案: JavaScript本身不提供此功能。而且我怀疑您是否可以创建这种类型的功能。例如: 鲍比属于谁?

  • 本文向大家介绍JavaScript中的Array 对象(数组对象),包括了JavaScript中的Array 对象(数组对象)的使用技巧和注意事项,需要的朋友参考一下  1、创建Array对象方法: --->var arr = [1,2,3];//简单的定义方法 此时可以知道 此时可以知道: 2、Array对象属性 Array常见的属性有三个:constructor、length和prototyp

  • 问题内容: 我有一个JavaScript对象,是否有内置的或公认的最佳实践方法来获取此对象的长度? 问题答案: 最可靠的答案(即,在引起最少的错误的同时,捕捉您要尝试做的事情的意图)将是: JavaScript中有一种约定,您无需向Object.prototype添加任何内容,因为它可能会破坏各种库中的枚举。不过,向Object添加方法通常是安全的。 更新,以及ES5及更高版本的[广泛部署。 对于

  • 主要内容:history 对象中的属性,history 对象中的方法JavaScript history 对象中包含了用户在浏览器中访问过的历史记录,其中包括通过浏览器浏览过的页面,以及当前页面中通过 加载的页面。我们可以通过 window 对象中的 history 属性来获取 history 对象,由于 window 对象是一个全局对象,因此在使用 时可以省略 window 前缀,例如 可以简写为 。 history 对象中的属性 下表中列举了 JavaScri