2016-05-09 196 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所说,我要通过它在服务器上 –