2016-05-24 6 views
0

У меня есть массив со всеми данными, полным списком. У меня есть второй массив с небольшим количеством данных.Угловой фильтр: не используйте данные другого массива

Что я хочу сделать, это отфильтровать первый, чтобы получить только те данные, которые отличаются от данных во втором массиве. А затем создайте третий массив с фильтрованным.

Вот массивы:

$scope.allparams = [{ 
    'tab': 'ADH', 
    'title': 'Adhérent' 
}, { 
    'tab': 'ADH', 
    'data': 'civilite', 
    'lib': 'Civilité', 
    'type': 'select' 
}, { 
    'tab': 'ADH', 
    'data': 'nom', 
    'lib': 'Nom', 
    'type': 'text' 
}, { 
    'tab': 'ADH', 
    'data': 'prenom', 
    'lib': 'Prénom', 
    'type': 'text' 
}, { 
    'tab': 'ADH', 
    'data': 'dateNaissance', 
    'lib': 'Date de naissance', 
    'type': 'date' 
}, { 
    'tab': 'ADH', 
    'data': 'nationalite', 
    'lib': 'Nationalité', 
    'type': 'select' 
}, { 
    'tab': 'ADH', 
    'data': 'statut', 
    'lib': 'Statut', 
    'type': 'select' 
}, { 
    'tab': 'DET', 
    'title': 'Détail comptable', 
    'type': 'select' 
}, { 
    'tab': 'DET', 
    'data': 'saison', 
    'lib': 'Saison', 
    'type': 'select' 
}, { 
    'tab': 'DET', 
    'data': 'activite', 
    'lib': 'Activité', 
    'type': 'select' 
}, { 
    'tab': 'DET', 
    'data': 'prix', 
    'lib': 'Prix', 
    'type': 'currency' 
}]; 

if (exportService.getStockParams() != undefined) { 
    // The second one, filled with a method 
    var stockParams = exportService.getStockParams(); 
} 

Вот Exemple второго массива:

[{ 
    "tab": "ADH", 
    "data": "nom", 
    "lib": "Nom", 
    "ordersource": 2, 
    "added": true 
}, { 
    "tab": "ADH", 
    "data": "prenom", 
    "lib": "Prénom", 
    "ordersource": 2, 
    "order": null, 
    "added": true 
}, { 
    "tab": "ADH", 
    "data": "dateNaissance", 
    "lib": "Date de naissance", 
    "ordersource": 2, 
    "order": null, 
    "added": true 
}] 

Скажите мне, если вам нужно больше информации.

Я новичок в Angular, и фильтры кажутся довольно трудными для освоения.

Надеюсь, вы могли бы помочь.

+0

«... отличается от тех, которые во втором массиве» Я вижу только один массив $ scope.allparams – shershen

+0

Второй является 'stockParams' заполняется методом –

+0

плз предоставить пример полученного в результате второго массива, данные, которые возвращаются фильтром exportService.getStockParams() – shershen

ответ

1

Для этого можно использовать differenceWith. Или без lodash с просто фильтром и всеми методами массива.

const all = [ 
 
    {x: 1, y: 2}, 
 
    {x: 1, y: 5}, 
 
    {x: 1, y: 6} 
 
]; 
 

 
const partial = [ 
 
    {x: 1, y: 5} 
 
]; 
 

 
const diff = difference(all, partial); 
 

 
console.log(diff) 
 

 
function difference(first, second) { 
 
    return first.filter((item) => { 
 
    return !second.every(angular.equals.bind(null, item)); 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

+0

Если я могу предотвратить использование файла сценария только для этого, это будет лучше:/Но спасибо –

+0

Нет проблем, изменил мой ответ, так что lodash больше не используется. – sielakos

+0

вы уверены, что op использует ES6? Вы используете представление функции стрелки – naveen