const usersData = [
{
count: 5,
providerList: [
{
gender: "F",
languageCodes: [
{
code: "JPN",
desc: "Japan"
}
],
},
{
gender: "F",
languageCodes: [
{
code: "SPN",
desc: "Spanish"
},
{
code: "IND",
desc: "Indian"
},
],
},
{
gender: "F",
languageCodes: [
{
code: "IND",
desc: "Indian"
}
],
},
{
gender: "M",
languageCodes: [
{
code: "US",
desc: "English"
}
],
},
{
gender: "M",
languageCodes: [
{
code: "Aus",
desc: "English"
}
],
}
]
}
];
let key=['gender']
let value=['M']
let finalData = usersData[0].providerList.filter(function(e) {
return key.every(function(a) {
return value.includes(e[a]);
});
});
console.info(finalData)
Здесь код содержит пример данных для пола и языка. Когда пользователь выполняет ключ использования, и значение сохраняется во фрагменте, вы получите finalData в качестве вывода.
Здесь мой вопрос: я также хочу отфильтровать значение languageCodes означает, что если ключ = ['code'] value = ['Indian'], он будет соответствующим образом фильтровать данные. Здесь моя проблема в том, что я не хочу менять переменную ключа и значения на фрагмент, например return key.every(function(a) {return value.includes(e[a]);
Спасибо
Это будет работать только в том случае, если usersData
всегда имеет один и тот же формат.
var _key=['code']
var _value=['Aus']
function _filter(data, key, value){
return data.filter(function(a){
return a[key] == value || (a.languageCodes && _filter(a.languageCodes, key, value).length)
})
}
console.info(_filter(usersData[0].providerList, _key, _value))
<script>
const usersData = [{
count: 5,
providerList: [{
gender: "F",
languageCodes: [{
code: "JPN",
desc: "Japan"
}],
},
{
gender: "F",
languageCodes: [{
code: "SPN",
desc: "Spanish"
},
{
code: "IND",
desc: "Indian"
},
],
},
{
gender: "F",
languageCodes: [{
code: "IND",
desc: "Indian"
}],
},
{
gender: "M",
languageCodes: [{
code: "US",
desc: "English"
}],
},
{
gender: "M",
languageCodes: [{
code: "Aus",
desc: "English"
}],
}
]
}];
</script>