2015-04-01 2 views
0

У меня есть список, как,элементы массива фильтра относительно другого массива в угловом контроллере

$scope.list1= [{"name":"name1","id":1},{"name":"name2","id":2},{"name":"name3","id":3},{"name":"name4","id":4}]; 

Я хочу, чтобы отфильтровать этот список в отношении другого списка, как,

$scope.list2=[1,3]; 

Здесь я хочу filter list1, чтобы оставались только те объекты, которые находятся в списке2. т.е.

после того, как фильтр

$scope.list1= [{"name":"name1","id":1},{"name":"name3","id":3}]; 

я могу сделать это с помощью функции сплайсинга. Но я хочу спросить, можно ли это сделать с помощью фильтра $ без использования цикла.

+0

Как насчет underscore.js? Мне это очень нравится для выполнения таких задач, не имея циклов. – namelivia

ответ

0

Вы можете легко сделать это с открытым исходным кодом проекта jinqJs http://www.jinqJs.com

См Fiddle

var list1= [{"name":"name1","id":1},{"name":"name2","id":2},{"name":"name3","id":3},{"name":"name4","id":4}]; 
var list2= [1,3]; 

var result = jinqJs().from(list1).where(function(row){ 
    return (list2.indexOf(row.id) > -1); 
}).select(); 

ИЛИ

таким образом

//Use jsJinq.com open source library 
 
var list1= [{"name":"name1","id":1},{"name":"name2","id":2},{"name":"name3","id":3},{"name":"name4","id":4}]; 
 
var list2= [1,3]; 
 

 
var result = jinqJs().from(list1).join(list2).on('id').select(); 
 

 
document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 4) + '</pre>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>