获取具有某些属性的对象的名称

时间:2013-01-13 18:32:38

标签: javascript search object

  

可能重复:
  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以防不清楚)名称属性为 {{1}的对象}。

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

如果可能,我还希望能够搜索具有obj2个号码或其他电话号码/地址的对象。

3 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果你把对象放在一个数组中(我认为这是一个比给它们所有名字更好的选择),你可以使用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];