我在$ .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;
});
.....
}
我认为这很清楚。
感谢大家的回答。
答案 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;
});