tengo dos arreglos y quiero verificar para sincronizar ambos, si en ambos existe el mismo nombre que debe estar almacenado en el arreglo y los otros no
por ejemplo: necesito todos los objetos con el nombre rea.jpg pero en mi matriz tengo esto ['dsjajdsj...h2/rea.jpg']
estos son los materiales
[{name: 'hgb.jpg' }, { name: 'rea.jpg'}, { name: 'ca.png' }]la extensión del archivo es siempre el final de la cadena
quiero verificar si existe un objeto en la matriz de nombres
const names = ['h2/rea.jpg'] const materials = [{ name: 'hgb.jpg' }, { name: 'rea.jpg' }, { name: 'ca.png' }] const res = materials.filter(x => names.includes(x.name)) console.log('RES', res) el resultado esperado debería ser [ {name: 'rea.jpg'}]
const names = ['h2/rea.jpg'] const materials = [{ name: 'hgb.jpg' }, { name: 'rea.jpg' }, { name: 'ca.png' }] const res = materials.filter(x => { const ni = names.filter(ni => ni.includes(x.name)) return ni.length > 0 }) console.log(res)Pero si los nombres son largos y no desea iterar sobre cada elemento de los materiales, siga la otra sugerencia y transforme los nombres para incluir solo el nombre del archivo.
const fnames = names.map(ni => ni.split('/')[ni.split('/').length-1]) const res = materials.filter(x => names.includes(x.name)) console.log(res)Use some dentro del filtro para lograr esto (tenga en cuenta que esto se ejecutará en O (n ^ 2)).
const names = ['h2/rea.jpg'] const materials = [{ name: 'hgb.jpg' }, { name: 'rea.jpg' }, { name: 'ca.png' }] const res = materials.filter(x => names.some(y => y.endsWith('/' + x.name))) console.log('RES', res)Suponiendo que se trata de Node.js, puede usar la biblioteca de path para convertir los nombres de ruta completamente calificados en nombres de archivo simples y luego hacer su prueba de inclusión. Por ejemplo:
const path = require('path'); const pathnames = ['h2/rea.jpg']; const filenames = pathnames.map((x) => path.basename(x)); const materials = [ { name: 'hgb.jpg', }, { name: 'rea.jpg', }, { name: 'ca.png', }, ]; const res = materials.filter((x) => filenames.includes(x.name)); console.log('RES', res); // RES [ { name: 'rea.jpg' } ]