Я немного борюсь с $ .grep и сравниваю массивы. Это конкретный вопрос, поэтому я постараюсь сделать его как можно проще.
У меня есть массив со списком магазинов, которые содержат список дополнительных услуг. е.г туалет, Wi-Fi и кофе. [туалет: «1», Wi-Fi: «0», кофе: «0»]
И у меня есть поля ввода (флажок).
var extras = [];
$(".input-extra").on("change", function(e){
if (this.checked){
extras.push(this.name);
}else{
extras.remove(this.name);
}
});
Если я поставлю флажок в поле ввода, мой массив будет заполнен именем поля ввода (например, «туалет»).
Теперь я хотел бы отобразить магазины, которые согласны с моими полями ввода. (Извините, я не знаю, как лучше описать, поэтому опубликовал несколько примеров)
e.G shop1 предлагает кофе и Wi-Fi. Ищу магазины с wifi. Итак, магазин 1 будет отображаться.
shop2 предлагает кофе и туалет. Ищу магазины с wifi. магазин 2 отображаться не будет. Это нормально работает: но как я могу встроить дополнительные функции?
function fillShopListFilter(data, zip, extras, pricemin, pricemax, squaremetermin, squaremetermax) {
var length = $.grep(shortShopList.shops, function( n, i ) {
return zip.includes(parseInt(n.zip)) && parseInt(n.price)>=pricemin && parseInt(n.price)<=pricemax && parseInt(n.squaremeter)>=squaremetermin && parseInt(n.squaremeter)<=squaremetermax;
});
.....
}
Я думаю, это ясно.
Спасибо за КАЖДЫЙ ответ.
Я получаю все магазины через Ajax как объект JSON. (REST API).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


JQuery grep:
Finds the elements of an array which satisfy a filter function. The original array is not affected.
var extras = [];
$(".input-extra").on("change", function(e) {
if (this.checked) {
extras.push(this.name);
} else {
extras = $.grep(extras, function(extra) {
return extra != this.name;
});
}
});
Извините, но это мне никак не помогает.
Я ответил сам.
var length = $.grep(shortShopList.shops, function( n, i ) {
return zip.includes(parseInt(n.zip)) && parseInt(n.price)>=pricemin && parseInt(n.price)<=pricemax && parseInt(n.squaremeter)>=squaremetermin && parseInt(n.squaremeter)<=squaremetermax;
});
var newlength = $.grep(length, function( n, i ) {
var x = 0;
$.each(n.extras, function (indexInArray, element) {
if (extras.includes(indexInArray) && parseInt(element) == 1){
x++;
}
});
return x == extras.length;
});
Можете ли вы также опубликовать свой текущий код для обновления списка магазинов вместе с заполнителем html для списка магазинов.