将AND过滤器更新为OR过滤Javascript

时间:2017-11-27 10:15:35

标签: javascript filter

我正在开发一个JavaScript过滤器,需要显示所有标有相关值的项目。目前我让它工作,以便显示已分配每个值的项目,而不是显示项目,只要它们具有指定的值之一。

因此,例如,如果我检查Cats and Dogs,我想显示分配了这些值中的任何一个的每个帖子,而不是仅显示已分配的项目。

我的代码示例如下:

var $filterCheckboxes = $('input[type="checkbox"], input[type="radio"]');
            $filterCheckboxes.on('change', function() {
                var selectedFilters = {};
                $filterCheckboxes.filter(':checked').each(function() {
                    if (!selectedFilters.hasOwnProperty(this.name)) {
                        selectedFilters[this.name] = [];
                    }
                    selectedFilters[this.name].push(this.value);
                });

                var $filteredResults = data;

                // console.log('filtered data: ' + $filteredResults);

                $.each(selectedFilters, function(name, filterValues) {
                    $filteredResults = $filteredResults.filter(function(item) {
                        var matched = false,
                            currentFilterValues = item.Tags;

                        console.log(currentFilterValues);

                        $.each(currentFilterValues, function(_, currentFilterValue) {
                            if ($.inArray(currentFilterValue, filterValues) != -1) {
                                matched = true;
                                return false;

                                console.log(currentFilterValue);
                            }
                        });
                        return matched;

                    });
                });  

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我走了一条不同的路线,最小化了代码,让它以我想要的方式运行:

var $filterCheckboxes = $('input[type="checkbox"], input[type="radio"]');
            $filterCheckboxes.on('change', function() {
                var $filteredResults = data;
                var selectedFilters = [];

                $filterCheckboxes.filter(':checked').each(function() {
                    selectedFilters.push(this.value);
                });

                $filteredResults = data.filter(function(item) {
                    return (_.intersection(item.Tags, selectedFilters).length > 0);
                });
            });

所以现在每次选中一个复选框时,都会看到所选标签是否与项目中的标签匹配,如果是,它会抓取任何匹配的项目并在列表中显示它们。