首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >过滤器JSON数组javascript

过滤器JSON数组javascript
EN

Stack Overflow用户
提问于 2018-09-19 02:54:50
回答 2查看 664关注 0票数 0

我只是在想如何简化下面的过滤器代码。它从JSON数组中筛选出包含三个特定JSON字符串键之一的搜索值的所有JSON字符串。我的Visual Studio对我微笑着说,如果我在开玩笑,我的代码复杂性:D,所以我只是好奇是否有任何不同的方法来修改我的代码片段,使其更有效。

代码语言:javascript
复制
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()))
        })
    });
  });

下面是一个数据示例:

代码语言:javascript
复制
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"
}]
EN

回答 2

Stack Overflow用户

发布于 2018-09-19 05:47:41

我试着重构你的代码。我不认为你需要用到罗达什。这可能不是您的代码的确切重构,但希望这能让您了解它可能是什么样子。

代码语言:javascript
复制
let keywordCompare = (keyword) => keyword.toLowerCase().includes(keyword.toLowerCase());
let filteredNames = obj.filter(
obj => keywordCompare(obj.name1) || keywordCompare(obj.name2) || keywordCompare(obj.name3)
);

在我看来干净多了。

票数 0
EN

Stack Overflow用户

发布于 2018-09-19 02:59:54

您可以获取对象的键,并在找到时使用some进行迭代。

代码语言:javascript
复制
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()))
        })
    });
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52392947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档