我只是在想如何简化下面的过滤器代码。它从JSON数组中筛选出包含三个特定JSON字符串键之一的搜索值的所有JSON字符串。我的Visual Studio对我微笑着说,如果我在开玩笑,我的代码复杂性:D,所以我只是好奇是否有任何不同的方法来修改我的代码片段,使其更有效。
return _.filter(obj, item => {
return _.every(filterParams, keyword => {
return _.some(item, value => {
return _.isString(value) && (
item.names1.toLowerCase().includes(keyword.toLowerCase()) ||
item.names2.toLowerCase().includes(keyword.toLowerCase()) ||
item.names3.toLowerCase().includes(keyword.toLowerCase()))
})
});
});
下面是一个数据示例:
export const data = [{
"HELP": "ageGroup1",
"Name": "ga1",
"EN": "ageGroup1",
"CZ": "N",
"names1": "AgeGroup",
"names2": "Element",
"names3": "N"
}, {
"HELP": "Level2",
"Name": "L2",
"EN": "aggregationGroup",
"CZ": "N",
"names1": "AggregationLevel",
"names2": "ElementLevel",
"names3": "N"
}]
发布于 2018-09-19 05:47:41
我试着重构你的代码。我不认为你需要用到罗达什。这可能不是您的代码的确切重构,但希望这能让您了解它可能是什么样子。
let keywordCompare = (keyword) => keyword.toLowerCase().includes(keyword.toLowerCase());
let filteredNames = obj.filter(
obj => keywordCompare(obj.name1) || keywordCompare(obj.name2) || keywordCompare(obj.name3)
);
在我看来干净多了。
发布于 2018-09-19 02:59:54
您可以获取对象的键,并在找到时使用some
进行迭代。
return _.filter(obj, item => {
return _.every(filterParams, keyword => {
return _.some(item, value => {
return _.isString(value) && ['names1', 'names2', 'names3']
.some(n => item[n].toLowerCase().includes(keyword.toLowerCase()))
})
});
});
https://stackoverflow.com/questions/52392947
复制相似问题