2013-09-25 74 views
0

我虛心地尋求幫助。我正在開發一個項目,在該項目中,我需要設置一個搜索來查找所有實例,在一個Object內部,一個特定的值等於用戶搜索的任何術語。我發現下面的代碼:在Javascript對象中查找特定值

function getObjects(obj, key, val) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      objects = objects.concat(getObjects(obj[i], key, val)); 
     } else if (i == key && obj[key] == val) { 
      objects.push(obj); 
     } 
    } 
    return objects; 
} 

here(以確保適當的信貸給出),偉大的工程,但是我正在尋找擴大這個代碼的功能有所幫助,包括以尋找更多的能力而不是一次一個元素,並且在返回時,還會在返回的相同對象中顯示其他值。作爲一個例子,使用上面的代碼,返回是簡單的[對象]:

我希望做的是追加[>對象]與對象的另一個變量值,可能是ID或描述,這兩者都是返回結果的一部分。因此,所需的結果將會像「Object:ID = b01」或「Object:Desc = This is Maple」這樣的東西,這將允許我的用戶快速查看他們需要查看哪個結果。

非常感謝您的協助!

+0

考慮使用jsonpath – Alnitak

+0

所以,如果它們可以在時間搜索一個以上的元素將在對象被添加到對象數組,如果它匹配所有元素或任何元素? – Tom

+0

對不起,應該是更具體。如果他們在搜索中有多個元素,它將是AND而不是OR,因此全部。 –

回答

0

從您的描述中,我已更改函數以查看樹狀對象,並能夠挑選出包含所有提供的key-value對的對象。另外,它允許您指定要在匹配的對象上輸出額外的參數。 (如iddescription

下面是代碼和示例 http://jsfiddle.net/hjhQz/

+0

謝謝湯姆!當我回到Tomorow時,我會試一試。 –

+0

還有一個問題,如果我只想返回'id'和'description'而不是整個原始對象,我將如何更改函數?謝謝! –

+0

我更新了小提琴http://jsfiddle.net/hjhQz/1/基本上唯一的變化就是這行'var out = {};'' – Tom