Tengo una matriz (dada a continuación). Quiero eliminar archivos, si minified versión reducida del mismo archivo.
var files = ["foo.js", "foo.min.js", "bar.css","bar.min.css"]; // Should return: [foo.min.js", "bar.min.css"] var files = ["foo.js", "foo.min.js", "bar.css"]; // Should return: [foo.min.js", "bar.css"] var files = ["foo.js", "bar.css"]; var tempUnMinified = []; var tempMinified = []; files.forEach(function (file) { if (file.endsWith(".min.js") || file.endsWith(".min.css")) { tempMinified.push(file); } else { tempUnMinified.push(file); } }); tempUnMinified.forEach(function (unMinFile) { var tempRf = unMinFile.replace(".js", ".min.js").replace(".css", ".min.css"); if (files.includes(tempRf)) { files.splice(files.indexOf(unMinFile), 1); } }); console.log(files);Lo que he intentado funciona, pero no estoy seguro de si funciona siempre
y así sucesivamente .. Gracias de antemano
Se puede hacer de forma un poco más concisa y de forma independiente del tipo de archivo...
const files = ["foo.js", "foo.min.js", "bar.css","bar.min.css"]; const remove = {} files.forEach(fn => { let comps = fn.split('.'); // is the middle token min? if (comps.length === 3 && comps[1] === 'min') { // remember to remove the file without the middle token remove[`${comps[0]}.${comps[2]}`] = true; } }); console.log(`will remove: ${Object.keys(remove)}`); const filtered = files.filter(fn => !remove[fn]); console.log(filtered);Use el mapa para manipular los datos de la matriz para eliminar ".min" y use un conjunto para la singularidad de los nombres de archivo
const files = ["foo.js", "foo.min.js", "bar.css","bar.min.css"]; const result = [...new Set(files.map(file => file.replace('.min', '')))]; console.log(result)Solo necesita crear una implementación personalizada del filtro.
const files = ["foo.js", "foo2.js", "foo2.css", "foo.min.js", "bar.css","bar.min.css"]; const result = files.filter((file) => { const miniPart = '.min.'; if (file.includes(miniPart)) return true; const [name, extension] = file.split('.'); const miniFile = `${name}${miniPart}${extension}`; return !files.includes(miniFile); }); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }