Сравните массивы с jQuery.grep () JS

Я немного борюсь с $ .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;
    });
.....
}

Я думаю, это ясно.

Спасибо за КАЖДЫЙ ответ.

Можете ли вы также опубликовать свой текущий код для обновления списка магазинов вместе с заполнителем html для списка магазинов.

Saurabh Tiwari 29.07.2018 10:01

Я получаю все магазины через Ajax как объект JSON. (REST API).

Robert 29.07.2018 10:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
192
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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;
    });
  }
});

Извините, но это мне никак не помогает.

Robert 29.07.2018 10:48
Ответ принят как подходящий

Я ответил сам.

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;
});

Другие вопросы по теме