У меня есть небольшое угловое приложение, которое я пишу, использующее Underscore для просмотра каждого объекта в массиве и удаления объекта, если оно не соответствует ключевому слову (пользовательский ввод).Underscore reject Функция с IndexOf удаляет все объекты из массива
$scope.search = function() {
$scope.posts = _.reject($scope.posts, function(p) {
var i = 0;
if ($scope.keywords.indexOf(p.author) < 0) {
i++;
}
if ($scope.keywords.indexOf(p.id) < 0) {
i++;
}
if(i > 0) {
return true;
}
});
};
Как вы можете видеть, я устанавливаю счетчик, а затем добавить к прилавку, если ключевое слово находится в индексе, то в конце проверки счетчика вернуть истинным или ложным, чтобы удалить объект из массив. $scope.posts
- это массив объектов с моими данными и $scope.keywords
- это пользовательский ввод. Я хочу найти вход от объекта $scope.posts.author
и объект $scope.posts.id
.
Если я удаляю один из операторов if
, функция выполняет как ожидалось: все, не соответствующие ключевому слову, удаляются из массива. Однако, как только я добавлю еще одну оператору if
(как показано в моем примере выше), ВСЕ объекты удаляются из массива.
Будет ли «фильтровать» лучшее совпадение для такого рода вещей? –
'keywords' - это строка – stephenthedev