2013-01-15 71 views
0

我正在嘗試獲取登錄的Facebook用戶的朋友。我使用fql,我想更新搜索框中輸入的每個字母的列表。我正在做這個活在fql中,這工作正常。搜索並過濾由Facebook返回的朋友的JSON列表

我偶然發現,最好一次讀完所有的朋友,然後搜索JSON對象。

對於數組

[{"uid":"1235","name":"user1_abcde","picture":"picurl"}, 
{"uid":"1237","name":"user2_abcde","picture":"picur2"}, 
{"uid":"1289","name":"user3_agere","picture":"picur3"} 
] 

我如何排序,得到數組中的結果搜索字符串(如:「德」)部分匹配name字段返回

[{"uid":"1235","name":"user1_abcde","picture":"picurl"}, 
    {"uid":"1237","name":"user2_abcde","picture":"picur2"} 
    ] 

謝謝

回答

0

首先,您需要解析json,然後使用正則表達式進行搜索。

function search(json, regex) { 
    var result = []; 
    $.each(JSON.parse(json), function(i, row) { 
     if (row.name.match(regex)) { 
      result.push(row); 
     } 
    }); 
    return result; 
} 

,您可以使用該功能的使用search(json, /de/)

+0

IMO正則表達式搜索德是有點矯枉過正,如果OP只需要匹配字符串。 – pawel

+0

@jcubic你可以暗示一下如何爲此編寫正則表達式? – aVC

+0

@aVC de'/ de /'如果你以搜索結尾爲結尾,你可以使用'/ de $ /' – jcubic

0
var searchFriend = function(str){ 
    /* make search case-insensitive */ 
    str = str.toLowerCase(); 
    /* assuming `friendsArray` is your cached JSON response */ 
    return friendsArray.filter( 
     function(i){ return (i['name'].toLowerCase().indexOf(str) > -1) } 
    ); 
} 

Array.filter at MDN