Quiero filtrar la matriz si contiene una cadena en particular. Funciona como se muestra a continuación. Pero no estoy seguro de cómo resolverlo si hay varias cadenas para hacer coincidir. Por ejemplo, en lugar de skillText = "Entry Level"; si tenemos 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); Para la coincidencia exacta, skillText.includes(v["Title"]) funciona, pero no estoy seguro de cómo hacerlo con las coincidencias parciales.
Puede usar some función en matrices, devuelve verdadero si alguno de los elementos devuelve verdadero desde la devolución de llamada
skillTexts = ["Entry Level", "Scientist"]; result = myList.filter(function(v) { return skillTexts.some(function(skill) { return v["Title"].includes(skill) }); })Esta puede ser una posible solución para lograr el objetivo deseado:
Fragmento de código
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));Explicación
.filter para iterar sobre la matriz ( hayStack )Title desde el iteradorneedle (el texto de búsqueda es una cadena o una matriz), primero use [].concat() para obtener una matriz (Esto se hace según el comentario de pilchard en la pregunta anterior).some para iterar y encontrar si algún elemento es parte del Título