簡體   English   中英

過濾JSON數組javascript

[英]filter JSON array 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"
}]

您可以拿起對象的鍵,並用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()))
        })
    });
});

我試圖重構您的代碼。 我認為您不需要使用lodash。 這可能不是代碼的確切重構,但希望它能使您對代碼的外觀有所了解。

let keywordCompare = (keyword) => keyword.toLowerCase().includes(keyword.toLowerCase());
let filteredNames = obj.filter(
obj => keywordCompare(obj.name1) || keywordCompare(obj.name2) || keywordCompare(obj.name3)
);

我認為似乎更清潔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM