如何解决如何仅显示数组过滤器的交集?
我有一个过滤脚本,可以打开和关闭索引中的某些代码块。现在,我的脚本一次只能显示一个条件,但我希望它显示许多条件之间的交集。
这是脚本:
<script>
MuseumFilter("all")
function MuseumFilter(c) {
var x,i;
x = document.getElementsByClassName("column");
if (c == "all") c = "";
for (i = 0; i < x.length; i++) {
w3RemoveClass(x[i],"show");
if (x[i].className.indexOf(c) > -1)
w3AddClass(x[i],"show");
}
}
function w3AddClass(element,name) {
var i,arr1,arr2;
arr1 = element.className.split(" ");
arr2 = name.split(" ");
for (i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) == -1) {
element.className += " " + arr2[i];
}
}
}
function w3RemoveClass(element,arr2;
arr1 = element.className.split(" ");
arr2 = name.split(" ");
for (i = 0; i < arr2.length; i++) {
while (arr1.indexOf(arr2[i]) > -1) {
arr1.splice(arr1.indexOf(arr2[i]),1);
}
}
element.className = arr1.join(" ");
}
// Add active class to the current
// button (highlight it)
var btnContainer = document.getElementById("filtering");
var btns = btnContainer.getElementsByClassName("bttn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click",function() {
var current =
document.getElementsByClassName("active");
current[0].className =
current[0].className.replace(" active","");
this.className += " active";
});
}
</script>
这非常简单,在选择对象时将show
添加到对象,否则将其删除。这对于简单的数组非常有用,但是我正在寻找两个或多个数组之间的交集。这是我的一个复选框(以前的按钮)的外观:
<div><input type="checkbox" class="leaflet-control-layers-selector" onchange="MuseumFilter('paid')"><span id="icons1">Paid Admission</span></div>
</label>
以下是一些Leaflet JS将它们分组:
var allMuseums = L.layerGroup(AllMuseums);
var mPaid = L.layerGroup(MPaid);
var mFree = L.layerGroup(MFree);
var mResto = L.layerGroup(MResto);
var mPicnic = L.layerGroup(MPicnic);
var m03 = L.layerGroup(M03);
var m37 = L.layerGroup(M37);
var m712 = L.layerGroup(M712);
var m1212 = L.layerGroup(M1212);
var mAgeAll = L.layerGroup(MAgeAll);
最后是数组本身:
AllMuseums=[Naturhistoriska,Junibacken,ArkDes,Fjarilshuset,Tekniska,Polismuseet,Skansen,Bergrummet,Vikingaliv,Vasa,Nordiska,Nobel,Moderna],MPaid=[Junibacken,Nobel],MFree=[Naturhistoriska,MResto=[Naturhistoriska,MPicnic=[Naturhistoriska,M03=[Junibacken,Skansen],M37=[Naturhistoriska,M712=[Naturhistoriska,M1212=[Naturhistoriska,MAgeAll=[Fjarilshuset,Skansen];
解决方法
TLDR :使用破折号_.intersection
您可以使用Lodash来获取交点。 有3个函数:“交集”,“ intersectionWith”和“ intersectionBy”。
“交集”比较整个值;
“ intersectionBy”按值的特定属性进行比较;
“ intersectionWith”,您可以创建将函数作为参数传递的特定比较器;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。