【发布时间】:2018-09-23 16:16:56
【问题描述】:
我正在编写一个基于多个条件的 JSON 数组过滤函数。
过滤器依赖于两个数组:
1. 第一个包含必须是搜索 JSON 的一部分的值,并且
2. 第二个包含可选的值。
我的意思是只返回包含obligatory 数组中的所有值和optional 数组中的至少一项的数组条目。
这是我的尝试:
const searchKeys = ['varWord', 'varTrans', 'varSpec'],
obligatory = ['trip', 'pret'],
optional = ['greet', 'lco', 'toto', 'bene'];
function filterByUpdate(obligatory, optional, file) {
return _.filter(file, item => {
return _.some(optional, opt => {
return _.every(obligatory, oblg => {
return _.some(item, value => {
return _.some(searchKeys, n => item[n].toLowerCase().includes(oblg.toLowerCase())) &&
searchKeys.some(n => item[n].toLowerCase().includes(opt.toLowerCase()))
})
});
});
});
}
上面的代码应该只保留以下数据数组中的第一个条目:
[{
"varSpec": "trip",
"varTrans": "pret",
"varWord": "greet",
"stringPol": "group",
"stringDva": "groupGend",
"stringGit": "/tax",
}, {
"varSpec": "trip",
"varTrans": "pret",
"varWord": "friend",
"stringPol": "N",
"stringDva": "N",
"stringGit": "N",
}, {
"varSpec": "group1",
"varTrans": "grp1",
"varWord": "ageGroup1",
"stringPol": "N",
"stringDva": "N",
"stringGit": "N",
}]
【问题讨论】:
-
searchKeys 是 JSON 键的数组,其中包含搜索的值。
-
似乎工作正常。你想要什么输出。它正在返回 varSpec: "trip" varTrans: "pret" varWord: "greet" stringPol: "group" stringDva: "groupGend" stringGit: "/tax"
-
哦,是的,你是对的!感谢您抽出宝贵时间,我的问题出在代码的不同部分。
标签: javascript json node.js filter lodash