Javascript 获取具有特定属性的对象的名称
可能重复:Javascript 获取具有特定属性的对象的名称,javascript,search,object,Javascript,Search,Object,可能重复: 我正在用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"; 如果
我正在用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";
如果这些属性中的任何一个不起作用,那么忽略它,我只是为了一个例子而编造它们
现在我意识到我很可能需要找到哪个对象的名称为“比利”。我不想让用户必须输入obj0
才能找到Billy
我将对象命名为obj0
而不是Billy
,因为我希望地址簿中有多个Billy
好的,现在来看实际问题:如何获取对象的名称或id(如果不清楚,我想获取对象的
obj0
),该对象的name属性为“Billy”
假设我有多个对象。其他的将被称为obj1
和obj2
如果可能,我还希望能够搜索编号为
“1-207-233-8446”
或其他电话号码/地址的对象 使用列表存储您的所有对象,并迭代列表,检查搜索条件是否满足,在您的情况下,它是“billy”。
如果不想使用list,请使用对象数组,然后使用for循环进行迭代。
希望这有所帮助。请告诉我您是否需要为此编写代码。为什么要调用这些对象?obj0、obj1等 考虑一下(除非你对右边的链接感到满意,这可能已经回答了这个问题): 然后创建此类对象的数组:
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;
}
}
for(变量i=0;i
如果您将对象放入一个数组(我认为这是一个比给它们所有名称更好的选择),您可以使用获取一个新的符合条件的项目数组:
var bobs = addresses.filter(function(address) { return address.name === "Bob"; });
请注意,filter
返回一个数组。但是如果你仔细想想,这是正确的,因为你的地址簿中很容易有不止一个Bob
关于这一点,您可以编写返回要传递给过滤器的函数:
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];
通常,这样的数据会存储在数据库中,您可以在其中查询所需的信息。这是一个非常常见的问题。请看右边的链接。@dystroy,你知道哪个问题是重复的吗?大多数“相关”问题看起来有点类似(或完全不相关),但我找不到一个能回答这个问题的问题。@SamuelEdwinWard问题是这个问题太模糊(或不止一个问题)。但是,任何搜索具有属性的数组的人都应该是好的。
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];