0

Ich habe eine Liste von URLs, die von einer API zurückgegeben wurde:Filter Liste von Strings, wenn ein Schlüsselwort übereinstimmt in einer anderen Liste Ramda mit

const data = [ 
    '/shoutouts', 
    '/shoutouts/shoutout', 
    '/news/news-story', 
    '/example-page', 
    '/another-page', 
    '/stories/what-s-next', 
    '/metrics', 
    '/links', 
    '/links/sprint', 
    '/quick-links', 
    '/quick-links/confluence' 
] 

und ich habe ein paar Kategorien, die Ich mag würde filtern meine URLs mit:

const filters = [ 
    'news', 
    'shoutouts', 
    'quick-links', 
    'metrics', 
    'links' 
] 

ich nur mit URLs überlassen möchte, die einen Kategorienamen enthalten in zum Beispiel, wenn eine der URLs links oder news enthält, können wir es behalten wollen..

Dies ist die (nicht funktionierende) Code Idee, die ich bisher habe.

Wie kann ich dies auf eine pure/ramda-artige Weise anpassen, um meine URL-Liste zu filtern?

+0

Sollten Sie nicht statt R.map mit R.filter werden? Karte würde immer noch Array von gleicher Länge zurückgeben. –

Antwort

2

können Sie folgende verwenden:

const filtered = R.filter(url => { 
    return R.any((filter) => { 
    return R.contains(filter, url); 
    }, filters); 
}, data); 
+0

Das funktioniert perfekt, danke! – gosseti

0

Eine Lösung mit einfach nur JS:

const filtered = data.reduce((res, curr) => filters.some(f => curr.includes(f)) ? res.concat(curr) : res, []) 
Verwandte Themen