Tengo una matriz de varios objetos de la siguiente manera (solo se muestran dos por brevedad):
const jobs = [ { "id": 1, "company": "Photosnap", "new": true, "featured": true, "position": "Senior Frontend Developer", "role": "Frontend", "level": "Senior", "postedAt": "1d ago", "contract": "Full Time", "location": "USA Only", "languages": ["HTML", "CSS", "JavaScript"], "tools": ["React", "Sass"] }, { "id": 2, "company": "Manage", "logo": "./images/manage.svg", "new": true, "featured": true, "position": "Fullstack Developer", "role": "Fullstack", "level": "Midweight", "postedAt": "1d ago", "contract": "Part Time", "location": "Remote", "languages": ["Python"], "tools": ["React"] },Y una serie de palabras clave
const keywords = ['React', 'Fullstack', 'Vue']
Me gustaría filtrar mi matriz de trabajos para devolver cualquier trabajo que contenga CUALQUIERA de las palabras clave en mi matriz de palabras clave. La matriz de palabras clave es dinámica y solo puede incluir uno o varios términos. Creo que array.prototype.filter es mi punto de partida, pero no sé cómo devolver objetos que incluyan alguna de mis palabras clave.
let result = jobs.filter(function(obj) { ... })` Could someone help?Puede usar filter, some and includes
let jobs = [{"id": 1,"company": "Photosnap","new": true,"featured": true,"position": "Senior Frontend Developer","role": "Frontend","level": "Senior","postedAt": "1d ago","contract": "Full Time","location": "USA Only","languages": ["HTML", "CSS", "JavaScript"],"tools": ["React", "Sass"]},{"id": 2,"company": "Manage","logo": "./images/manage.svg","new": true,"featured": true,"position": "Fullstack Developer","role": "Fullstack","level": "Midweight","postedAt": "1d ago","contract": "Part Time","location": "Remote","languages": ["Python"],"tools": ["React"]}, {"id": 3,"company": "Manage","logo": "./images/manage.svg","new": true,"featured": true,"position": "Fullstack Developer","role": "Fullstack","level": "Midweight","postedAt": "1d ago","contract": "Part Time","location": "Remote","languages": ["Python"],"tools": ["Angular"]}] const keywords = ['React', 'Fullstack', 'Vue'] let results = jobs.filter(job => { return job.tools.some(v => keywords.includes(v)) }) console.log(results)Puede mejorar la complejidad del tiempo usando Set
let jobs = [{"id": 1,"company": "Photosnap","new": true,"featured": true,"position": "Senior Frontend Developer","role": "Frontend","level": "Senior","postedAt": "1d ago","contract": "Full Time","location": "USA Only","languages": ["HTML", "CSS", "JavaScript"],"tools": ["React", "Sass"]},{"id": 2,"company": "Manage","logo": "./images/manage.svg","new": true,"featured": true,"position": "Fullstack Developer","role": "Fullstack","level": "Midweight","postedAt": "1d ago","contract": "Part Time","location": "Remote","languages": ["Python"],"tools": ["React"]}, {"id": 3,"company": "Manage","logo": "./images/manage.svg","new": true,"featured": true,"position": "Fullstack Developer","role": "Fullstack","level": "Midweight","postedAt": "1d ago","contract": "Part Time","location": "Remote","languages": ["Python"],"tools": ["Angular"]}] const keywords = new Set(['React', 'Fullstack', 'Vue']) let results = jobs.filter(job => { return job.tools.some(v => keywords.has(v)) }) console.log(results)