Я хочу сортировать набор фильмов по нескольким атрибутам, таким как жанр или формат. Идея состоит в том, что пользователь выбирает с элементами флажка тип фильмов, которые он хочет отображать на экране. Мой вопрос: как можно вставить несколько атрибутов, например, вставить несколько имен, например массив, чтобы их отфильтровать?
<div id="filters" class="filters">
<strong>Format: </strong>
<input type="checkbox" name="format" value="Standard">Standard   
<input type="checkbox" name="format" value="3D">3D   
<input type="checkbox" name="format" value="Imax">Imax <br>
<strong>Genre: </strong>
<input type="checkbox" name="genre" value="comedy">Comedy   
<input type="checkbox" name="genre" value="drama">drama   
<input type="checkbox" name="genre" value="sciencefiction">Science fiction   
<input type="checkbox" name="genre" value="horror">Horror <br>
</div>
Предполагая, что фильмы представлены массивом:
var movies = [
{
title: 'Avatar',
format: '3D',
genre: 'sciencefiction'
},
{
title: 'Saw',
format: 'Standard',
genre: 'horror'
}
];
Вам нужно будет отфильтровать этот массив на основе проверки флажков. Вы можете сделать это в прослушивателе событий:
// Some code skipped for brewity
$controls.on('change', function () {
var formats = $formats.filter(':checked').map(getValue).get();
var genres = $genres.filter(':checked').map(getValue).get();
var filtered = movies.filter(function (e) {
var formatMatch = formats.length === 0 || formats.indexOf(e.format) > -1;
var genreMatch = genres.length === 0 || genres.indexOf(e.genre) > -1;
return formatMatch && genreMatch;
});
render($output, filtered);
});
Полная демонстрация: http://jsfiddle.net/V4aW2/