用jQuery.grep()JS比较数组

时间:2018-07-29 07:40:00

标签: javascript jquery arrays filter

我在$ .grep方面有点挣扎,并且在比较Arrays。 这是一个特定的问题,因此我将尝试使其尽可能简单。

我有一个带有商店清单的数组,其中包含一些附加物品清单。 例如厕所,无线网络和咖啡。 [厕所:“ 1”,wifi:“ 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提供咖啡和无线网络。我正在寻找带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;
    });
.....
}

我认为这很清楚。

感谢大家的回答。

2 个答案:

答案 0 :(得分:0)

jQuery grep:

  

查找满足过滤器功能的数组元素。原始数组不受影响。

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

答案 1 :(得分:0)

我自己回答了。

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