El código actual devuelve todos los elementos encontrados si la matriz contiene un elemento comp = ['bbb'] ver ejemplo. ¿Cómo puedo cambiar el código para generar la matriz como una coincidencia estricta, es decir, log [[ 'a', 'bbb', 'c' ]] ? Para otros casos, no se requieren cambios. Adjunté el código real y escribí los ejemplos de salida.
function datasearch() { let array = [['a', 'bbb', 'c'], ['r', 'bbbfff', 'y',],['w', 'bbbfffkkk', 'u',]] let comp = ['bbb']; let ans = []; for (let i = 0; i < array.length; i++) { for (el of array[i]) { if (comp.every(y => el.includes(y))) { ans.push(array[i]); break; } } } console.log(ans); } now comp = ['bbb'] log [ [ 'a', 'bbb', 'c' ],[ 'r', 'bbbfff', 'y' ],[ 'w', 'bbbfffkkk', 'u' ] ]Resultado esperado para la búsqueda con un elemento de matriz
comp = ['bbb'] log [[ 'a', 'bbb', 'c' ]]Para otros casos, todo es como en el código actual. Por ejemplo:
comp = ['bbb','fff'] log [ [ 'r', 'bbbfff', 'y' ], [ 'w', 'bbbfffkkk', 'u' ] ]Parece que necesita dos comportamientos separados, que deben tratarse de forma independiente.
comp tiene solo un elemento, debe buscar una coincidencia exacta en la matriz array de origen.comp contiene varios elementos, solo verifica si los elementos están presentes en la matriz de origen (implementación actual).El código se convertirá en:
function datasearch() { let array = [['a', 'bbb', 'c'], ['r', 'bbbfff', 'y',], ['w', 'bbbfffkkk', 'u',]] let comp = ['bbb']; let ans = []; for (let i = 0; i < array.length; i++) { if (comp.length == 1) { for (el of array[i]) { if (el === comp[0]) { ans.push(array[i]); break; } } } else { for (el of array[i]) { if (comp.every(y => el.includes(y))) { ans.push(array[i]); break; } } } } console.log(ans); }Si te entendí correctamente, tal vez tal solución pueda ayudarte:
function datasearch(comp = [], strictCompare = false) { const array = [ ['a', 'bbb', 'c'], ['r', 'bbbfff', 'y', ], ['w', 'bbbfffkkk', 'u', ] ] const ans = []; for (let i = 0; i < array.length; i++) { for (el of array[i]) { if (comp.every(y => (strictCompare) ? el === y : el.includes(y))) { ans.push(array[i]); break; } } } return ans; } console.log('not strict', datasearch(['bbb'])); console.log('strict', datasearch(['bbb'], true)); console.log('combine(strict & not strict)', datasearch(['bbb'], true).concat(datasearch(['kkk'])));