You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:02:45