Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取具有特定属性的对象的名称_Javascript_Search_Object - Fatal编程技术网

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];