1

可能重复:
根据其属性获取数组元素的索引

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

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

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

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

我正在命名该对象obj0,而不是Billy因为我想让地址簿中包含多个 Billy 成为可能。

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

假设我有不止一个对象。其他人将被称为obj1and obj2

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

4

3 回答 3

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;
    }
}
于 2013-01-13T18:39:03.257 回答
1

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

于 2013-01-13T18:38:19.237 回答
0

如果你把你的对象放在一个数组中(我认为这是一个比给它们全名更好的选择),你可以使用该filter方法来获取一个符合条件的新项目数组:

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];
于 2013-01-13T18:55:55.963 回答