如何通过允许部分匹配的字符串数组过滤字符串数组

Tim*_*tis 4 javascript arrays functional-programming

我在数组中有字符串,需要删除包含字符串的条目。但也删除部分匹配。

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

我目前的解决方案如下:

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
  });
}
Run Code Online (Sandbox Code Playgroud)

但我觉得可能有更好的方法来做到这一点。这在计算上可能不是最有效的方式。

Moh*_*man 5

您可以.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));
Run Code Online (Sandbox Code Playgroud)