【问题标题】:How to determine if two strings contain the same word in JavaScript?如何确定两个字符串在 JavaScript 中是否包含相同的单词?
【发布时间】:2018-09-18 00:20:58
【问题描述】:

所以,我最感兴趣的是看看谁能巧妙地解决这个问题。它可能会归结为split 和一些比较循环。

问题:我正在组合 exif 数据的多个字段来为图像创建标题。问题是这个 exif 数据的内容范围很广。

尼康示例:

exifData.Make = "NIKON CORPORATION"
exifData.Model = "NIKON D90"

摩托罗拉手机示例:

exifData.Make = "Motorola"
exifData.Model = "XT1032"

在摩托罗拉的情况下,我会简单地使用MakeModel 的组合。

但是,在尼康的情况下,有重复,所以我想忽略Make,在这种情况下优先考虑Model

【问题讨论】:

  • 如果你使用split,那么你可以计算你将得到的两个数组的交集(stackoverflow.com/q/11076067/3410584)。然后,如果交集不为空,则您必须实现自己的逻辑才能知道您喜欢哪个字段。
  • @ValLeNain 据我所知,它不能处理不区分大小写的问题。

标签: javascript arrays node.js ecmascript-6 exif


【解决方案1】:

Make 转换为包含一组单词的正则表达式,如果Model 包含匹配项,则将test。如果包含,则取Model,如果没有,则合并MakeModel

const getTitle = ({ Make, Model }) =>
  new RegExp('\\b' + Make.replace(/\s+/g, '|') + '\\b', 'i')
    .test(Model) ? Model : `${Make} ${Model}`;

console.log(getTitle({ Make: "Motorola", Model: "XT1032" }));
console.log(getTitle({ Make: "NIKON CORPORATION", Model: "NIKON D90" }));

【讨论】:

    【解决方案2】:

    let exifData = {};
    
    exifData.Make = "NIKON CORPORATION"
    exifData.Model = "NIKON D90"
    
    let elems = {},
      repeats = {};
    
    let make = exifData.Make.toLowerCase().split(" ").forEach(data => {
      elems[data] = true;
    });
    
    let model = exifData.Model.toLowerCase().split(" ").forEach(data => {
      if(elems[data]) repeats[data] = true;
    });

    【讨论】:

      【解决方案3】:

      您可以使用includes() 拆分Make 字符串并检查Model 中的第一个令牌:

      let exifData1 = {Make: "NIKON CORPORATION", Model: "NIKON D90"},
          exifData2 = {Make: "Motorola", Model: "XT1032"};
      
      function getName(o) {
        return !o.Model.includes(o.Make.split(" ")[0]) ? o.Make + " " + o.Model : o.Model;
      }
      
      console.log(getName(exifData1));
      console.log(getName(exifData2));

      【讨论】:

      • 它应该打印NIKON D90模型具有更高的优先级。
      • @MarcosCasagrande 抱歉,现已修复。
      猜你喜欢
      • 1970-01-01
      • 2018-05-30
      • 2019-11-07
      • 2016-05-11
      • 1970-01-01
      • 2011-04-25
      • 2019-03-11
      • 2011-07-20
      • 1970-01-01
      相关资源
      最近更新 更多