如何使用键多值过滤数组中的数组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用键多值过滤数组中的数组?相关的知识,希望对你有一定的参考价值。
const usersLanguageData = {
transactionId: 6847655349501841000,
count: 5,
providerList: [
{
code:['US'],
weekendOfficeHours: false
},
{
code:['US','IND'],
weekendOfficeHours: true
},
{
code:['US','IND','AUS'],
weekendOfficeHours: false
},
{
code:[],
weekendOfficeHours: false
},
{
weekendOfficeHours: true
}
]
};
let filterKeyName1 = ["code"];
let filterValue1 = ['IND','US'];
//let filterValue2 = ['US'];
let filteredProviderData = usersLanguageData.providerList.filter(function(e) {
return filterKeyName1.every(function(a) {
console.log(e[a])
return filterValue1.includes(e[a]);
});
});
console.log(filteredProviderData);
这里的代码片段将usersLanguageData显示在对象表单中。这里我想用键过滤值,例如这里filterKeyName1 = ['code']和filterValue1 = ['IND','US']它会将第二个和第三个对象显示在usersLanguageData对象中。同样的方法是filterValue2进入注释行,它将显示usersLanguageData中的第1,第2和第3个对象。
答案
你应该在函数内再次使用every()
。并且还使用e[a]
在使用every()
之前检查,因为你的一个项目没有code
密钥
const usersLanguageData = { transactionId: 6847655349501841000, count: 5, providerList: [ { code:['US'], weekendOfficeHours: false }, { code:['US','IND'], weekendOfficeHours: true }, { code:['US','IND','AUS'], weekendOfficeHours: false }, { code:[], weekendOfficeHours: false }, { weekendOfficeHours: true } ] };
let filterKeyName1 = ["code"];
let filterValue1 = ['IND','US'];
//let filterValue2 = ['US'];
let filteredProviderData = usersLanguageData.providerList.filter(function(e) {
return filterKeyName1.every(function(a) {
console.log(e[a])
return e[a] && filterValue1.every(x => e[a].includes(x));
});
});
console.log(filteredProviderData);
另一答案
您可以使用值和对象的属性或空数组进行过滤。
const usersLanguageData = { transactionId: 6847655349501841000, count: 5, providerList: [{ code: ['US'], weekendOfficeHours: false }, { code: ['US','IND'], weekendOfficeHours: true }, { code: ['US','IND','AUS'], weekendOfficeHours: false }, { code: [], weekendOfficeHours: false }, { weekendOfficeHours: true }] };
let key = "code";
let values = ['IND','US'];
let result = usersLanguageData.providerList
.filter(o => values.every(v => (o[key] || []).includes(v)));
console.log(result);
以上是关于如何使用键多值过滤数组中的数组?的主要内容,如果未能解决你的问题,请参考以下文章