如何在JavaScript中判断两个字符串是否包含相同单词?
解决EXIF多字段合并去重生成图片标题的方案
这种设备EXIF字段重复的问题我太熟了!之前做图片管理工具的时候天天跟这个打交道,用split拆分单词+对比过滤的思路完全能搞定,既兼容不同设备的字段差异,又能避免重复内容,给你分享个实用的实现方案:
核心思路
- 把
Make和Model字段按空格拆分成单词数组,统一转成小写做重复判断,避免大小写差异导致漏判 - 过滤掉
Model中已经在Make里出现过的单词 - 最后将
Make和去重后的Model内容拼接成最终标题
代码实现(JavaScript版)
function generateImageTitle(exifData) { // 处理空值,防止字段缺失时报错 const make = exifData.Make?.trim() || ''; const model = exifData.Model?.trim() || ''; if (!make && !model) return 'Unknown Device'; // 把Make的单词转小写存进映射表,方便快速查找 const makeWordMap = make.split(/\s+/).reduce((map, word) => { map[word.toLowerCase()] = true; return map; }, {}); // 过滤Model中重复的单词 const uniqueModelParts = model.split(/\s+/).filter(word => { return !makeWordMap[word.toLowerCase()]; }); // 拼接结果,只有当Model有去重后的内容才添加 const titleParts = [make]; if (uniqueModelParts.length > 0) { titleParts.push(uniqueModelParts.join(' ')); } return titleParts.join(' '); } // 测试案例 const nikonExif = { Make: "NIKON CORPORATION", Model: "NIKON D90" }; console.log(generateImageTitle(nikonExif)); // 输出: "NIKON CORPORATION D90" const motoExif = { Make: "Motorola", Model: "XT1032" }; console.log(generateImageTitle(motoExif)); // 输出: "Motorola XT1032"
代码实现(Python版)
如果用Python处理EXIF,这个逻辑同样适用:
def generate_image_title(exif_data): make = exif_data.get('Make', '').strip() model = exif_data.get('Model', '').strip() if not make and not model: return 'Unknown Device' # 把Make的单词转小写存进集合,方便快速查找 make_words = set(word.lower() for word in make.split()) # 过滤Model中不在Make里的单词 unique_model_words = [word for word in model.split() if word.lower() not in make_words] # 拼接最终标题 title_parts = [make] if unique_model_words: title_parts.append(' '.join(unique_model_words)) return ' '.join(title_parts) # 测试 nikon_exif = {'Make': 'NIKON CORPORATION', 'Model': 'NIKON D90'} print(generate_image_title(nikon_exif)) # 输出: "NIKON CORPORATION D90" moto_exif = {'Make': 'Motorola', 'Model': 'XT1032'} print(generate_image_title(moto_exif)) # 输出: "Motorola XT1032"
额外注意事项
- 用
/\s+/(JS)或默认split()(Python)拆分是为了处理字段中可能存在的多个连续空格 - 保留原单词的大小写,确保生成的标题和原EXIF字段的格式一致,不会破坏品牌标识的原有样式
- 加入了空值处理逻辑,避免当
Make或Model字段缺失时出现报错或奇怪的输出
内容的提问来源于stack exchange,提问作者j_d
相关产品推荐
相关产品推荐

