[英]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.