【问题标题】:get the name of an object with certain properties [duplicate]获取具有某些属性的对象的名称[重复]
【发布时间】:2012-12-27 17:21:19
【问题描述】:

可能重复:
Getting index of an array’s element based on it’s properties

我正在使用 HTML、jQuery、JS、CSS 以及所有正常的东西创建一个地址簿。这只是一个简单的 C.R.U.D。应用程序,没什么花哨的。我处于中等水平,并且对我将要创建它的方法有点麻烦。我让书中的每个人都成为一个对象。每个对象都使用诸如obj0 之类的名称创建。然后该对象将被分配值,例如:

obj0.name = "Billy";
obj0.num = "1-207-233-8846";
obj0.address = "18 Phillmore Rd, Miami, Florida";

如果这些属性中的任何一个不起作用,请忽略它,我只是为了举例而编造它们。

现在我意识到我很可能需要找到名称为"Billy" 的对象。我不想让用户必须输入obj0 才能找到比利。

我将对象命名为 obj0 而不是 Billy,因为我希望在通讯录中可以有多个 Billy。

好的,现在是实际问题:
我如何获得名称或 ID(如果不清楚,我想获得 obj0具有 "Billy" 的名称属性。

假设我有多个对象。其他人将被称为obj1obj2

如果可能的话,我还希望能够搜索带有"1-207-233-8446" 号码或其他电话号码/地址的对象。

【问题讨论】:

  • 通常情况下,诸如此类的数据将存储在数据库中,您可以在其中查询所需的信息。
  • 这是一个非常常见的问题。请查看右侧的链接。
  • @dystroy,你知道哪个问题是重复的吗?大多数“相关”问题似乎有点相似(或完全不相关),但我找不到能回答这个问题的问题。
  • @SamuelEdwinWard 问题是问题太模糊(或不止一个问题)。但是任何搜索具有属性的数组都应该是好的。

标签: javascript search object


【解决方案1】:

使用列表来存储您的所有对象并迭代列表并检查是否满足搜索条件,在您的情况下它是“比利”。 如果您不想使用列表,请使用对象数组,然后使用 for 循环进行迭代。 希望这有帮助。请告诉您是否需要此代码。

【讨论】:

    【解决方案2】:

    你为什么称这些对象为任何东西? obj0、obj1 等...

    考虑一下(除非您对右边的链接感到满意,它可能已经回答了这个问题):

    function Person( name, num, address ) {
        this.name = name;
        this.num = num;
        this.address = address;
    }
    

    然后你创建一个这样的对象数组:

    var persons = [
        new Person( "Billy", "1-207-233-8846", "18 Phillmore Rd, Miami, Florida" ),
        new Person( "Bob", "2", "somewhere" )
    ];
    

    搜索变得简单:

    for ( var i = 0; i < persons.length; ++i ) {
        if ( persons[ i ].name == "Billy" ) {
            // Found, do something with Billy
            break;
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果你将你的对象放在一个数组中(我认为这比给它们全名更好),你可以使用filter method 来获得一个符合条件的新数组:

      var bobs = addresses.filter(function(address) { return address.name === "Bob"; });
      

      请注意,filter 返回一个数组。但仔细想想,这是正确的,因为您的通讯录中很容易拥有多个 Bob!

      这方面的巧妙之处在于,您可以编写返回函数以传递给 filter 的函数:

      function withName(name) {
        return function(address) {
          return address.name === name;
        };
      }
      
      function withNumber(number) {
        return function(address) {
          return address.number === number;
        }
      }
      
      var bobs = addresses.filter(withName("Bob"));
      

      然后,您可以编写函数来组合这些函数来创建更具体的查询:

      function and(p1, p2) {
        return function(address) {
          return p1(address) && p2(address);
        }
      }
      
      var billy = addresses.filter(and(withName("Billy"), withNumber("1-207-233-8846")))[0];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        • 1970-01-01
        • 2020-07-11
        • 2019-12-07
        • 2013-07-23
        相关资源
        最近更新 更多