25.01.2019, 13:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Alexko64
|
попробуйте найти Galaxy, Samsung note 6
|
Тут надо определится с поиском, либо вы ищите точное совпадение, то есть режим "И", либо одно из совпадений, то есть режим "ИЛИ". Ибо баг при поиске по совпадению строк предполагает поиск в режиме ИЛИ, что и достигается рег выражением. Теперь же речь идет о "Galaxy, Samsung note 6", которого нет, и его не должно быть, а это уже означает режим И, фактически полное совпадение строк.
|
|
25.01.2019, 13:52
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
function fnSearch(arr, pattern) {
var parts = pattern.trim().toLowerCase().split(/\s+/);
return arr.filter(function(product) {
return parts.every(function(part) {
return product.name.toLowerCase().includes(part)
});
});
}
Кстати вы можете менять some на every, посмотрите, может вам нужен такой эффект!
Последний раз редактировалось Malleys, 25.01.2019 в 14:13.
Причина: Если вы смотрели решение до 10:56 по Гринвичу, то посмотрите ещё раз.
|
|
25.01.2019, 13:57
|
Интересующийся
|
|
Регистрация: 17.04.2018
Сообщений: 26
|
|
Сообщение от рони
|
Alexko64,
замените
function fnSearch(arr, pattern) {
pattern = escapeRegExp(pattern);
pattern = new RegExp("(" + pattern.trim().replace(/\s+/g, "|") + ")", "i");
return arr.filter(function(el) {
pattern.lastIndex = 0;
return pattern.test(el.name)
})
};
|
Работает, но ищет совпадения любого из слов в запросе по отдельности.
Перезалил на хост. При поиске Samsung 2GB находит все где есть слово samsung и все где есть 2GB.
Я так понимаю что алгоритм поиска должен быть такой:
Показывать все результаты где было совпадение всех слов введенных в запросе но не обращать внимание на порядок слов в искомой строке.
|
|
25.01.2019, 14:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
НУ может быть тогда такое как Malleys написал?
|
|
25.01.2019, 14:00
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сообщение от Alexko64
|
где было совпадение всех слов введенных
|
пост №22 замените some на every
|
|
25.01.2019, 14:03
|
Интересующийся
|
|
Регистрация: 17.04.2018
Сообщений: 26
|
|
Сообщение от Malleys
|
function fnSearch(arr, pattern) {
return arr.filter(function(product) {
return toSearch
.trim()
.toLowerCase()
.split(/\s+/)
.some(function(p) {
return product.name.toLowerCase().includes(p)
});
});
}
Кстати вы можете менять some на every, посмотрите, может вам нужен такой эффект!
|
Попробовал, поиск перестал работать совсем, если не слоэно скиньте целым куском с моим кодом, а то я уже запутался к какому варианту относится ваша правка
|
|
25.01.2019, 14:05
|
Интересующийся
|
|
Регистрация: 17.04.2018
Сообщений: 26
|
|
Залил на хостинг вариант с правкой Malleys
Не работает поиск совсем
http://mobidor.zzz.com.ua/test.php
|
|
25.01.2019, 14:06
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Последний раз редактировалось Malleys, Сегодня в 13:05. Причина: Если вы смотрели решение до 10:56 по Гринвичу, то посмотрите ещё раз.
|
|
25.01.2019, 14:06
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Alexko64,
function fnSearch(arr, pattern) {
return arr.filter(function(product) {
return pattern
.trim()
.toLowerCase()
.split(/\s+/)
.every(function(p) {
return product.name.toLowerCase().includes(p)
});
});
}
var products = [
{name:'Samsung Galaxy s9',
html:'<div>Samsung Galaxy S9</div>'
},
{name:'Galaxy S9 Samsung',
html:'<div>Galaxy S9 Samsung</div>'
},
];
</script>
<script>
var SLS = {
products: $('#products'),
plow:$('#plow'),
phigh:$('#phigh'),
isearch:$('#isearch'),
prod:products,
sproducts: products,
page:1,
limit:12,
isort:0,
init:function(){
SLS.pload(SLS.page,SLS.limit);
SLS.events();
},
pload:function(page,limit){
for(var i=((page-1)*limit);i<(limit*page);i++){
if(SLS.prod[i])
SLS.products.append($(SLS.prod[i].html));
}
},
sorta:function(type){
var byPrice = SLS.prod.slice(0);
byPrice.sort(function(a,b) {
return a.price - b.price;
});
if(type==1)
byPrice=byPrice.reverse();
SLS.prod=byPrice;
SLS.page=1;
SLS.products.html('');
SLS.pload(SLS.page,SLS.limit);
},
events:function(){
$(window).on('scroll',function(){
if($(this).scrollTop()+250>=($(document).height() - window.innerHeight-$('footer').height())){
SLS.page++;
SLS.pload(SLS.page,SLS.limit);
}
});
SLS.plow.on('click',function(){
SLS.isort=0;
SLS.sorta(SLS.isort);
});
SLS.phigh.on('click',function(){
SLS.isort=1;
SLS.sorta(SLS.isort);
});
SLS.isearch.on('keyup',function(){
var results = [];
var toSearch = SLS.isearch.val();
if(toSearch=='') {
SLS.prod = products;
}else{
SLS.prod = fnSearch(SLS.sproducts, toSearch);
}
SLS.page=1;
SLS.products.html('');
SLS.sorta(SLS.isort);
});
}
};
SLS.init();
|
|
25.01.2019, 14:14
|
Интересующийся
|
|
Регистрация: 17.04.2018
Сообщений: 26
|
|
Урааа) заработало
Вы лучшие. Плюсики в карму всем кто старался.
Залил на хост рабочий вариант, можете глянуть
Последний раз редактировалось Alexko64, 25.01.2019 в 14:18.
|
|
|
|