2013-01-13 143 views
1

可能重複:
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,因爲我想使人們有可能在地址簿中有一個以上的比利。

好了,現在的實際問題:
我該如何獲得名稱或ID(我想在情況不清楚obj0),其具有的"Billy" name屬性的對象

假設我有一個以上的對象。其他人將被稱爲obj1obj2

如果可能的話我也想能夠搜索對象與"1-207-233-8446"其他電話號碼/地址的數量或。

+1

通常,像這樣的數據將被存儲在數據庫中,您將在其中查詢所需的信息。 – zzzzBov

+5

這是一個非常常見的問題。請查看右側的鏈接。 –

+0

@dystroy,你知道哪個問題是重複的嗎?大多數「相關」問題似乎有點類似(或完全不相關),但我找不到解決這個問題的問題。 –

回答

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

使用列表來存儲您的所有對象和迭代的列表,並檢查是否搜索條件滿足與否,你的情況是「比利」。 如果您不想使用列表,請使用對象數組,然後使用for循環進行迭代。 希望這有助於。請告訴你是否需要此代碼。

0

如果你把你的對象數組(我認爲這是上午UCH不是讓他們所有的名字更好的選擇),您可以使用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]; 
相關問題