#javascript #arrays #logic
#javascript #массивы #Логические
Вопрос:
Я использую плагин jQuery isotope для сортировки и фильтрации элементов. Элементы — это продукты, имеющие несколько групп фильтров. Я сталкиваюсь с одной проблемой, мне нужно фильтровать продукты с помощью атрибута фильтра с несколькими выборками в примере одной группы:
Группы фильтров: пол, категория продукта, материал продукта.
Выберите образец: мужчины, сумка, кожа.
Приведенный выше пример работает нормально.
Но мне нужно что-то вроде
Новый выбор фильтра: Мужчины, Сумка, Кошелек, кожа, Rexin.
Если вы заметили, что сумка и кошелек из одной группы. И leather, и Rexin из одной группы.
для этого мне нужно было бы передать значение фильтра следующим образом
значение фильтра — .men.bag.leather,.men.wallet.leather,.men.bag.rexin,.men.wallet.rexin.
Это звучит просто, но мне сложно это кодировать.
У меня есть массив каждой группы фильтров, который я обновляю, когда пользователь выбирает или отменяет выбор определенного фильтра
Итак, по сути, мне нужно объединить или сгруппировать несколько массивов фильтров в одну строку, при этом каждая группа содержит каждый элемент из каждого массива, и каждая группа разделяется запятой.
Массивы в javascript:
var gender = ['.men'];
var type = ['.bag','.wallet'];
var material = ['.leather','.rexin'];
Output:
".men.bag.leather,.men.wallet.leather,.men.bag.rexin,.men.wallet.rexin"
Надеюсь, мне ясно, что мне нужно.
Помощь очень ценится.
Обновить:
Поскольку фильтры могут различаться для разных продуктов, я не могу использовать жестко заданные переменные, такие как пол, тип и т.д. Поэтому вместо этого я использую массив фильтров
var selectedFilter = [];
selectedFilter['gender'] = ['.men'];
selectedFilter['type'] = ['.bag','.wallet'];
selectedFilter['platform'] = ['.leather','.rexin'];
Нужен вывод типа:
«.men.bag.leather,.men.wallet.leather,.men.bag.rexin,.men.wallet.rexin».
Нужна какая-то функция, которую я могу напрямую передать одной переменной массива. Нравится
combine(selectedFilter);
Ответ №1:
Вы могли бы использовать комбинированный алгоритм.
function combine(object) {
function c(part, index) {
array[index].forEach(function (a) {
var p = part.concat([a]);
if (p.length === array.length) {
r.push(p.join(''));
return;
}
c(p, index 1);
});
}
var array = Object.keys(object).map(function (k) { return object[k]; }),
r = [];
c([], 0);
return r.join();
}
var selectedFilter = { // use an object instead of
gender: ['.men'], // an array with properties
type: ['.bag','.wallet'],
platform: ['.leather','.rexin']
};
console.log(combine(selectedFilter));