簡體   English   中英

如何通過允許部分匹配的字符串數組過濾字符串數組

[英]How to filter Array of Strings by Array of Strings allowing partial matches

我在數組中有字符串,需要刪除包含字符串的條目。 而且還刪除了部分匹配項。

var rawData = ["foo", "bar", "foobar", "barbaz", "boo" ]
var unwantedData = ["foo","baz"]
var cleanData = filter(rawData,unwantedData)
console.log(cleanData)
>>>["bar","boo"]

我當前的解決方案如下:

function filter(data,filterArray){
  return data.filter(rawEntry => {
    var t = true; // set to false if index is found
    filterArray.forEach(unwantedStr => { t = t && ~rawEntry.indexOf(unwantedStr) ? false : t });
    return t; //decides if entry gets removed by filter
  });
}

但是我覺得可能會有更好的方法。 這可能不是計算上最有效的方法。

除了使用Array#every ,您還可以通過反轉邏輯並使用Array#some

 var rawData = ["foo", "bar", "foobar", "barbaz", "boo"], unwantedData = ["foo", "baz"], result = rawData.filter(s => !unwantedData.some(t => s.includes(t))); console.log(result); 

您可以.filter()使用.every().includes()方法。

 let rawData = ["foo", "bar", "foobar", "barbaz", "boo"], unwantedData = ["foo", "baz"]; let filterData = (a1, a2) => a1.filter(s => a2.every(v => !s.includes(v))); console.log(filterData(rawData, unwantedData)); 

 var rawData = ["foo", "bar", "foobar", "barbaz", "boo" ] var unwantedData = ["foo","baz"] var cleanData = rawData.filter((item)=> !unwantedData.includes(item)) console.log(cleanData) 

暫無
暫無

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

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