У меня есть функция Angular, и я пытаюсь вернуть отфильтрованный набор данных, используя метод Javascript Array.prototype.filter()
. Я сопоставляю несколько объектов ввода key
value
пары с другим набором пар объектов key
value
и возвращает объект, если они совпадают.Угловой сервисный фильтр Subtractive
Вот моя служба:
app.service('scatterService', function(inputService) {
return function(data) {
var inputs = inputService.selectedInModel(); // returns 1 - 4 user input objects
function getSelected(inputs) {
return data.filter(function(obj) {
// for each user input that exists
angular.forEach(inputs, function(val, id) {
var dataProp = val['inData'];
// if prop value in data = prop value in user input
if (obj[dataProp] == val['value']) {
// returns objects that have *either* of the user inputs
return true;
}
return false;
});
});
}
var newData = getSelected(inputs);
console.log(newData);
};
});
Это возвращает набор объектов, которые содержат свойства либо с value
«а» или value
«б», но один из двух. Я хочу, чтобы это возвращало только объекты с значениями a и b. Таким образом, если имеется четыре теоретических пользовательских ввода, каждый выбранный пользователем пользователь сжимает данные все больше и больше. Или верните только те элементы, которые имеют все входные значения.
Я также хочу, чтобы это позволило функционально фильтровать до 4 потенциальных входов.
Edit: Добавление Структура объекта
inputs: {
'entertainment': {
id: 'entertainment',
inData: 'Ent',
value: '',
},
'TV': {
id: 'TV',
inData: 'tv',
value: '17'
},
'Radio': {
id: 'radio',
inData: 'radio',
value: 'JackFM'
}
},
данные: 300+ элементы
data = [
{
id: '12345',
Ent: 30,
tv: 33
},
{
id: 'TV',
tv: 17,
Ent: 999
}
// ... and so on
]
Я думаю, что это может помочь, чтобы увидеть пример того, что '' data' и inputs' может выглядеть – kaveman
Конечно, я сделаю это изменить. – Himmel
Добавлены объекты ввода и сопоставления – Himmel