这是我的代码:
data = [
{
Company: "Company Name",
Type: "MINING",
Location: "Middle East"
},
{
Company: "Company Name 2",
Type: "DISTRIBUTION OUTLET",
Location: "Europe"
},
...
];
myfilter = [
"REPROCESSING PLANT",
"MINING",
"PROCESSING PLANT/MINE",
"DISTRIBUTION OUTLET"
];
var myresults = [];
results = data.filter(function(el) {
if (myfilter.indexOf(el.Type) != -1 && myfilter.indexOf(el.Location) != -1) {
return el;
}
});
console.log(results);
(原文:https://jsfiddle.net/rpsb8buh/4/)
要求:
我有一个数据阵列,我想根据以下数组过滤器过滤它们,如果使用类型&&像
一样位置myfilter = ['REPROCESSING PLANT','MINING','PROCESSING PLANT/MINE','DISTRIBUTION OUTLET','Europe'];
但如果我在没有位置的情况下通过过滤器,则无法正常工作
myfilter = ['REPROCESSING PLANT','MINING','PROCESSING PLANT/MINE','DISTRIBUTION OUTLET'];
答案 0 :(得分:3)
因为&&
只返回两个条件都是真的。
更好地使用Array#includes()
<强>更新强>
你应该在过滤后验证数组的长度。然后它为空,你可以根据需要为type
匹配数组分配数据数组或过滤器
var data = [ { "Company": "Company Name", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "9714 883 7571", "Email": "Gma@emirates.net.ae", "Website": "www.emirates.net.au", "MarkerColor": 'pink', "Type": "MINING", "Location": "Middle East", "latitude": 25.856407, "longitude": 17.247047 }, { "Company": "Company Name 2", "Address": "Lorem ipsum dolor sit amet, vel no congue quaeque eruditi", "Telphone": "", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'brown', "Type": "DISTRIBUTION OUTLET", "Location": "Europe", "latitude": 45.526054, "longitude": 3.892456 }, { "Company": "Company Name 3", "Address": "Lorem ipsum dolor sit amet, vel no congue quaeque eruditi", "Telphone": "22115 48558", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'yellow', "Type": "REPROCESSING PLANT", "Location": "Middle East", "latitude": 20.526054, "longitude": 1.892456 }, { "Company": "Company Name 4", "Address": "", "Telphone": "221 981 558", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'light-pink', "Type": "PROCESSING PLANT/MINE", "Location": "Europe", "latitude": 48.526054, "longitude": 26.892456 }, { "Company": "Company Name 5", "Address": "", "Telphone": "111 922 252", "Email": "Gma@emirates.net.ae", "Website": "www.example.com", "MarkerColor": 'yellow', "Type": "REPROCESSING PLANT", "Location": "Middle East", "latitude": 32.526054, "longitude": 36.892456 }, { "Company": "Company Name 6", "Address": "", "Telphone": "4361 922 252", "Email": "Gma@emirates.net.ae", "Website": "www.example.com", "MarkerColor": 'yellow', "Type": "REPROCESSING PLANT", "Location": "Americas", "latitude": -32.526054, "longitude": -66.892456 }, { "Company": "Company Name 7", "Address": "", "Telphone": "4361 332 111", "Email": "Gma@emirates.net.ae", "Website": "www.ssaww.com", "MarkerColor": 'brown', "Type": "DISTRIBUTION OUTLET", "Location": "Middle East", "latitude": -32.526054, "longitude": 26.892456 }, { "Company": "Company Name 8", "Address": "", "Telphone": "221 981 558", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'light-pink', "Type": "PROCESSING PLANT/MINE", "Location": "Asia Pacific", "latitude": 18.526054, "longitude": 76.892456 }, { "Company": "Company Name 9", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "9714 883 7571", "Email": "Gma@emirates.net.ae", "Website": "www.emirates.net.au", "MarkerColor": 'pink', "Type": "MINING", "Location": "Middle East", "latitude": -5.856407, "longitude": 20.247047 }, { "Company": "Company Name 10", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "", "Email": "Gma@emirates.net.ae", "Website": "www.emirates.net.au", "MarkerColor": 'brown', "Type": "DISTRIBUTION OUTLET", "Location": "Asia Pacific", "latitude": -25.856407, "longitude": 120.247047 }, { "Company": "Company Name 11", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "", "Email": "Gma@emirates.net.ae", "Website": "www.emirates.net.au", "MarkerColor": 'yellow', "Type": "REPROCESSING PLANT", "Location": "Americas", "latitude": 55.856407, "longitude": -120.247047 }, { "Company": "Company Name 12", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'pink', "Type": "MINING", "Location": "Americas", "latitude": 25.856407, "longitude": -100.247047 }, { "Company": "Company Name 13", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'pink', "Type": "MINING", "Location": "Asia Pacific", "latitude": 4.062187, "longitude": 101.496645 }, { "Company": "Company Name 14", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "2233 65448 21", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'yellow', "Type": "REPROCESSING PLANT", "Location": "Asia Pacific", "latitude": 22.556300, "longitude": 113.916657 }, { "Company": "Company Name 15", "Address": "Lorem ipsum dolor sit amet quaeque eruditi", "Telphone": "2233 65448 21", "Email": "Gma@emirates.net.ae", "Website": "www.example.com", "MarkerColor": 'light-pink', "Type": "PROCESSING PLANT/MINE", "Location": "Americas", "latitude": 25.826347, "longitude": -80.207989 }, { "Company": "Company Name 16", "Address": "Lorem ipsum dolor sit amet, vel no congue quaeque eruditi", "Telphone": "", "Email": "Gma@emirates.net.ae", "Website": "", "MarkerColor": 'yellow', "Type": "REPROCESSING PLANT", "Location": "Europe", "latitude": 39.526054, "longitude": -3.892456 } ];
var myfilter = ['REPROCESSING PLANT','MINING','PROCESSING PLANT/MINE','DISTRIBUTION OUTLET','Europe'];
var myresults= [];
var results = data.filter(function(el){
return myfilter.includes(el.Type) && myfilter.includes(el.Location)
})
if(results.length ==0 ){ //if array empty
results = data.filter(function(el){
return myfilter.includes(el.Type);//set all matched type
})
//or if you need all
//assign
//results = data
}
console.log(results)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:0)
这是您的过滤功能:
if (myfilter.indexOf(el.Type) != -1 && myfilter.indexOf(el.Location) != -1)
如果myFilter中存在类型和位置,则条件为真。 如果这不是你的目的,也许你可以使用这样的OR(||):
if (myfilter.indexOf(el.Type) != -1 || myfilter.indexOf(el.Location) != -1)
这样,如果存在类型或位置(或两者),则条件为真。
答案 2 :(得分:0)
<强>更新强>
工作解决方案:Fiddle
使用: Array#Filter
&amp; Array#Some
示例:的
let data = [
{
"Company": "Company Name",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "9714 883 7571",
"Email": "Gma@emirates.net.ae",
"Website": "www.emirates.net.au",
"MarkerColor": 'pink',
"Type": "MINING",
"Location": "Middle East",
"latitude": 25.856407,
"longitude": 17.247047
},
{
"Company": "Company Name 2",
"Address": "Lorem ipsum dolor sit amet, vel no congue quaeque eruditi",
"Telphone": "",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'brown',
"Type": "DISTRIBUTION OUTLET",
"Location": "Europe",
"latitude": 45.526054,
"longitude": 3.892456
},
{
"Company": "Company Name 3",
"Address": "Lorem ipsum dolor sit amet, vel no congue quaeque eruditi",
"Telphone": "22115 48558",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'yellow',
"Type": "REPROCESSING PLANT",
"Location": "Middle East",
"latitude": 20.526054,
"longitude": 1.892456
},
{
"Company": "Company Name 4",
"Address": "",
"Telphone": "221 981 558",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'light-pink',
"Type": "PROCESSING PLANT/MINE",
"Location": "Europe",
"latitude": 48.526054,
"longitude": 26.892456
},
{
"Company": "Company Name 5",
"Address": "",
"Telphone": "111 922 252",
"Email": "Gma@emirates.net.ae",
"Website": "www.example.com",
"MarkerColor": 'yellow',
"Type": "REPROCESSING PLANT",
"Location": "Middle East",
"latitude": 32.526054,
"longitude": 36.892456
},
{
"Company": "Company Name 6",
"Address": "",
"Telphone": "4361 922 252",
"Email": "Gma@emirates.net.ae",
"Website": "www.example.com",
"MarkerColor": 'yellow',
"Type": "REPROCESSING PLANT",
"Location": "Americas",
"latitude": -32.526054,
"longitude": -66.892456
},
{
"Company": "Company Name 7",
"Address": "",
"Telphone": "4361 332 111",
"Email": "Gma@emirates.net.ae",
"Website": "www.ssaww.com",
"MarkerColor": 'brown',
"Type": "DISTRIBUTION OUTLET",
"Location": "Middle East",
"latitude": -32.526054,
"longitude": 26.892456
},
{
"Company": "Company Name 8",
"Address": "",
"Telphone": "221 981 558",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'light-pink',
"Type": "PROCESSING PLANT/MINE",
"Location": "Asia Pacific",
"latitude": 18.526054,
"longitude": 76.892456
},
{
"Company": "Company Name 9",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "9714 883 7571",
"Email": "Gma@emirates.net.ae",
"Website": "www.emirates.net.au",
"MarkerColor": 'pink',
"Type": "MINING",
"Location": "Middle East",
"latitude": -5.856407,
"longitude": 20.247047
},
{
"Company": "Company Name 10",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "",
"Email": "Gma@emirates.net.ae",
"Website": "www.emirates.net.au",
"MarkerColor": 'brown',
"Type": "DISTRIBUTION OUTLET",
"Location": "Asia Pacific",
"latitude": -25.856407,
"longitude": 120.247047
},
{
"Company": "Company Name 11",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "",
"Email": "Gma@emirates.net.ae",
"Website": "www.emirates.net.au",
"MarkerColor": 'yellow',
"Type": "REPROCESSING PLANT",
"Location": "Americas",
"latitude": 55.856407,
"longitude": -120.247047
},
{
"Company": "Company Name 12",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'pink',
"Type": "MINING",
"Location": "Americas",
"latitude": 25.856407,
"longitude": -100.247047
},
{
"Company": "Company Name 13",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'pink',
"Type": "MINING",
"Location": "Asia Pacific",
"latitude": 4.062187,
"longitude": 101.496645
},
{
"Company": "Company Name 14",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "2233 65448 21",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'yellow',
"Type": "REPROCESSING PLANT",
"Location": "Asia Pacific",
"latitude": 22.556300,
"longitude": 113.916657
},
{
"Company": "Company Name 15",
"Address": "Lorem ipsum dolor sit amet quaeque eruditi",
"Telphone": "2233 65448 21",
"Email": "Gma@emirates.net.ae",
"Website": "www.example.com",
"MarkerColor": 'light-pink',
"Type": "PROCESSING PLANT/MINE",
"Location": "Americas",
"latitude": 25.826347,
"longitude": -80.207989
},
{
"Company": "Company Name 16",
"Address": "Lorem ipsum dolor sit amet, vel no congue quaeque eruditi",
"Telphone": "",
"Email": "Gma@emirates.net.ae",
"Website": "",
"MarkerColor": 'yellow',
"Type": "REPROCESSING PLANT",
"Location": "Europe",
"latitude": 39.526054,
"longitude": -3.892456
}
];
// Solution when locations is provided:
const types = ['REPROCESSING PLANT','MINING','PROCESSING PLANT/MINE','DISTRIBUTION OUTLET'];
const locations = ['Europe']; // Just remove 'Europe' or add different location and test it!
let result = data.filter(d => types.some(t => d.Type === t) && locations.length > 0 ? locations.some(l => d.Location === l) : true);
console.log(result);