如果陣列包含特定字串,我想過濾它。它的作業原理如下所示。但是如果有多個字串要匹配,我不確定如何解決它。例如 - 而不是skillText = "Entry Level";如果我們有skillText = ["Entry Level", "Scientist", "Analyst"];
var myList = [{"Title":"Entry Level - Data Analyst","Location":"Boston"}, {"Title":"Entry Level3 - Analyst","Location":"Delhi"}, {"Title":"Scientist","Location":"Boston"}];
skillText = "Entry Level";
result = myList.filter(function(v) {
return v["Title"].indexOf(skillText) > -1;
})
console.log(result);
對于完全匹配 skillText.includes(v["Title"])有效,但不確定如何處理部分匹配。
uj5u.com熱心網友回復:
您可以some在陣列上使用該函式,如果任何專案從回呼中回傳 true,則回傳 true
skillTexts = ["Entry Level", "Scientist"];
result = myList.filter(function(v) {
return skillTexts.some(function(skill) {
return v["Title"].includes(skill)
});
})
uj5u.com熱心網友回復:
這可能是實作預期目標的一種可能解決方案:
代碼片段
const findMatches = (hayStack, needle) => (
hayStack.filter(
({Title}) => (
[].concat(
needle
).some(
skill => Title.includes(skill)
)
)
)
);
const myList = [{"Title":"Entry Level - Data Analyst","Location":"Boston"}, {"Title":"Entry Level3 - Analyst","Location":"Delhi"}, {"Title":"Scientist","Location":"Boston"}];
let skillText = 'Entry Level';
console.log('searching text: "Entry Level"\nfound: ', findMatches(myList, skillText));
skillText = ['Level', 'Analyst', 'Scientist'];
console.log('searching array', skillText.join(), '\nfound: ', findMatches(myList, skillText));
解釋
- 用于
.filter遍歷陣列 (hayStack) - 解構以直接
Title從迭代器訪問 - 為了適應
needle(搜索文本是字串或陣列),首先使用[].concat()獲取陣列(這是根據上述問題中 pilchard 的評論完成的) - 用于
.some迭代并查找是否有任何元素是 Title 的一部分
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/450035.html
標籤:javascript
