2016-05-09 194 views
3

的元素Angular.js過濾器我有JSON obects像一個數組:通過陣列

$scope.users = [ 
    {name:'Maria',age:25,skills["Angular.js","Node.js"]}, 
    {name:'Maxime',age:28,skills["HTML","MongoDB"]}, 
    {name:'Noemie',age:28,skills["CSS","MongoDB"]} 
] 

我想打一個搜索引擎。如果用戶可以輸入一個或多個單詞,然後我的應用程序將過濾我的變量。

例如,用戶輸入「28」和「MongoDB的」,然後我把兩個查詢陣列中的像

$scope.queries = [28,"MongoDB"] 

和過濾我的數組:它$ scope.users。

請注意,$ scope.users不作爲爲例那樣簡單,它有薩姆其他陣列至極包含數組等等......所以我會比較喜歡的功能,「簡單的」搜索關鍵詞

我想知道如何做一個功能或過濾器,你能幫助我嗎?謝謝 !


法國

BonsoiràTOUS, J'AI聯合國畫面JSON:

$scope.users = [ 
    {name:'Maria',age:25,skills["Angular.js","Node.js"]}, 
    {name:'Maxime',age:28,skills["HTML","MongoDB"]}, 
    {name:'Noemie',age:28,skills["CSS","MongoDB"]} 
] 

j'aimerais放任聯合國 「MOTEUR德RECHERCHE」,聯合國utilisateur pourra rentrer聯合國歐plusieurs詞與cléindépendantset mon application filtrera ma variable avec

例如,用戶可以使用「28」和「MongoDB」je mets ces valeurs dans un tableau:

$scope.queries = [28,"MongoDB"] 

etçafiltrera ma varaible:$ scope.users avec ce tableau。

Notez que ma variable $ scope.users n'est pas aussi simple que l'exemple,elle estconstituéde tableaux dans des tableaux etc ... du coup jeprivilégiela recherche「simple」par motsclé。

Vous voyez ce que je veux faire? pouvez vous m'aider? MERCI!

+0

我會把這個搜索功能在後臺,讓SQL處理。如果你的數據集變大了,你會有一段糟糕的時間。 – Kyle

+0

是的,艾弗特想着這件事,我會這麼做的! –

回答

2

不是很優化,但你可以試試這個

var filterQueries = [28,"MongoDB"]; 
var filteredResults = $scope.users.filter(function(obj){ 
    var match = false; 
    filterQueries.forEach(function(query){ 
    if (obj.name == query || obj.age == query || obj.skills.indexOf(query) != -1) 
    { 
     match = true; //assuming you want any of the query to be found rather than all 
    } 
    }); 
    return match; 
}); 

DEMO

\t 
 
var users = [ 
 
    {name:'Maria',age:25,skills : ["Angular.js","Node.js"]}, 
 
    {name:'Maxime',age:28,skills : ["HTML","MongoDB"]}, 
 
    {name:'Noemie',age:28,skills : ["CSS","MongoDB"]} 
 
]; 
 

 
var filterQueries = [28,"MongoDB"]; 
 
var filteredResults = users.filter(function(obj){ 
 
    var match = false; 
 
    filterQueries.forEach(function(query){ 
 
    if (obj.name == query || obj.age == query || obj.skills.indexOf(query) != -1) 
 
    { 
 
     match = true; //assuming you want any of the query to be found rather than all 
 
    } 
 
    }); 
 
    return match; 
 
}); 
 

 
document.body.innerHTML += JSON.stringify(filteredResults, 0, 4)

+0

好的,謝謝,這不完全是我想要做的,但正如KKKKKKKK所說,我要通過它在服務器上 –