I have an array (given below). I want to remove files, if minified version of the same file exist.
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);
What i have tried does works, but i'm not sure if it works every time
and so on.. Thanks in advance
It can be done a little more concisely and in a way that's independent of file type...
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 the map to manipulate the array data to remove ".min" and Use a set for the uniqueness of filenames
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)
You just need to create a custom implementation of the filter
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; }