尝试使用filter数组筛选主数组并获取结果



我正在尝试根据筛选值数组筛选结果。下面是主阵列

var mainArray = [
{ id: 1, Country: ["India"], Version: "v1" },
{ id: 2, Country: ["US", "UK"], Version: "v2" },
{ id: 3, Country: ["Australia"], Version: "v3" },
{ id: 4, Country: ["UK"], Version: "v4" },
{ id: 5, Country: ["UK"], Version: "v3" },
{ id: 6, Country: ["US"], Version: "v2" },
{ id: 7, Country: ["Australia"], Version: "v4" },
{ id: 8, Country: ["India"], Version: "v2" }
];

这是过滤条件:

var filterValue = [
{
name: "Country",
value: [
{ text: "India", checked: true },
{ text: "US", checked: true },
{ text: "UK", checked: false },
{ text: "Australia", checked: false }
]
},
{
name: "Version",
value: [
{ text: "v1", checked: true },
{ text: "v2", checked: true },
{ text: "v3", checked: false },
{ text: "v4", checked: false }
]
}
]

以下是基于我试图获得的filterValue的resultArray:

var resultArray = [
{ id: 1, Country: ["India"], Version: "v1" },
{ id: 2, Country: ["US", "UK"], Version: "v2" },
{ id: 6, Country: ["US"], Version: "v2" },
{ id: 8, Country: ["India"], Version: "v2" }
];

谢谢你的帮助。

假设您想要在所有过滤器上使用AND,请使用以下内容:

let results = mainArray.filter(main => {
// map every filter on each main value
let filters = filterValue.map(filter => {
// normalize filter values
let key = filter.name,
val = filter.value.filter(r => r.checked).map(r => r.text);
// console.log(key, val);
// > "Country", [ 'India', 'US' ]
// > "Version", [ 'v1', 'v2' ]  

let prop = main[key];
// filter out empties
if (!prop)
return 0;
// single string to an array
if (!Array.isArray(prop))
prop = [prop];
// intersect prop and val arrays
return prop.filter(r => val.includes(r)).length
});

// return wether all conditions match
return filters.every(r => !!r);
});

我使用了这些JavaScript Array Methods:filter((find((包括

希望这有帮助:

var mainArray = [
{ id: 1, Country: ["India"], Version: "v1" },
{ id: 2, Country: ["US", "UK"], Version: "v2" },
{ id: 3, Country: ["Australia"], Version: "v3" },
{ id: 4, Country: ["UK"], Version: "v4" },
{ id: 5, Country: ["UK"], Version: "v3" },
{ id: 6, Country: ["US"], Version: "v2" },
{ id: 7, Country: ["Australia"], Version: "v4" },
{ id: 8, Country: ["India"], Version: "v2" }];
var filterValue=[{
name: "Country",
value: [
{ text: "India", checked: true },
{ text: "US", checked: true },
{ text: "UK", checked: false },
{ text: "Australia", checked: false }
]}, {
name: "Version",
value: [
{ text: "v1", checked: true },
{ text: "v2", checked: true },
{ text: "v3", checked: false },
{ text: "v4", checked: false }
]}];

var result=  mainArray.filter(function(item){
var country= filterValue[0].value.find(x=>x.checked&&item.Country.includes(x.text));
var version= filterValue[1].value.find(x=>x.checked&&x.text==item.Version);
return country&&version;
});
for(var i=0;i<result.length;i++)
console.log(JSON.stringify(result[i]));

最新更新