javascript - 过滤 JSON 数组 javascript
问题描述
我只是在考虑如何简化下面的过滤器代码。它从包含三个特定 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"
}]
解决方案
我试图重构你的代码。我认为你不需要使用 lodash。这可能不是您的代码的确切重构,但希望这能让您了解它的外观。
let keywordCompare = (keyword) => keyword.toLowerCase().includes(keyword.toLowerCase());
let filteredNames = obj.filter(
obj => keywordCompare(obj.name1) || keywordCompare(obj.name2) || keywordCompare(obj.name3)
);
在我看来似乎更干净。
推荐阅读
- python - 在 Python 的函数中定义自定义函数
- javascript - React.js:如何将基于类的组件转换为函数式?
- shellcode - 调试 unicode msfvenom 有效负载
- reactjs - 在按钮按下时调用一个组件,它返回模态但它在屏幕上不可见
- javascript - 基于蹦床的链表(lisp 树)到带循环的字符串
- xcode - Xcode 12.0 调试时不显示变量
- javascript - 如何将状态变量传递给 React 中的函数?
- sql - 如何在以下 SQL 查询的输出中获得正确的名称?
- spring - 在 ResponseEntityExceptionHandler 中,handleExceptionInternal 和 handleException 之间的确切区别是什么?
- mysql - 如何在 Laravel 中使用子句进行链接