可能重复:
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
个号码或其他电话号码/地址的对象。
答案 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];