如果我有两个带有文件的数组
arr1 = ['file1.webp', 'file2.webp', ...];
arr2 = ['file1.jpg', 'file2.png', 'file3.jpg', 'file4.jpg', ...];
我如何检查哪些数组项相等,减去*.format
部分?
这个想法是,如果有两个相等的项目,webp
则可以使用a和另一个来源。如果项目不匹配,则不会webp
提供任何来源。两种情况都会在以后导致不同的图像处理。
我可以像这样比较两个数组中的项目: let match = arr1.find( val => arr2.includes(val) );
但这会比较每个项目。我只想比较文件名。提供文件的格式需要被截断,所以我得到:
arr1 = ['file1', 'file2', ...];
arr2 = ['file1', 'file2', 'file3', 'file4', ...];
然后,我可以过滤掉两个数组之间的所有匹配项。我一直在寻找一个真正的解决方案,但是我仍然不确定如何到达那里。
使用修剪文件扩展名的功能,您可以构造一个其中一个转换数组的Set。然后遍历另一个数组,并检查其变换后的项是否在Set中:
const arr1 = ['file1.webp', 'file2.webp'];
const arr2 = ['file1.jpg', 'file2.png', 'file3.jpg', 'file4.jpg'];
const transform = str => str.replace(/\.[^.]+$/, '');
const set1 = new Set(arr1.map(transform));
for (const item of arr2) {
if (set1.has(transform(item))) {
console.log('Match for', item);
} else {
console.log('No match for', item);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句