Estoy tratando de eliminar elementos de la matriz que ya están presentes en elementos más largos. Por ejemplo, si tengo dos elementos 'Base de conocimiento' y 'base', quiero eliminar 'base', si tengo gestión de conocimiento varias veces, quiero dejar todos los elementos a menos que haya un elemento que contenga esas dos palabras pero es más largo para ejemplo 'libro de gestión del conocimiento'.
Es fácil ordenar los elementos por longitud, pero no estoy seguro de cómo verificar, por ejemplo, si la 'base' ya está presente a más largo plazo ('Base de conocimiento')
Entonces, en el siguiente ejemplo, la solución deseada sería:
const items = ['Knowledge base', 'knowledge management', 'knowledge management'] const items = ['Knowledge base', 'base', 'management', 'knowledge management', 'Knowledge', 'knowledge', 'knowledge management'] const newItems = items.sort((a,b) => b.length - a.length) console.log(newItems)Puede usar Array.filter() junto con Array.some() para filtrar cualquier elemento que esté incluido en otros elementos.
const items = ['Knowledge base', 'base', 'management', 'knowledge management', 'Knowledge', 'knowledge', 'knowledge management']; const result = items.filter(item => !items.some(it => it !== item && it.includes(item))); console.log('Result:', result);Filtrar por algunos y verificar por métodos incluidos
const items = ['Knowledge base', 'base', 'management', 'knowledge management', 'Knowledge', 'knowledge', 'knowledge management']; const newItems = items.filter((item) => { return !items.some((iChecker) => { return iChecker !== item && iChecker.includes(item) } ) } ); console.log( { newItems } );