如何判断两个字符串在JavaScript中是否包含同一个词?

How to determine if two strings contain the same word in JavaScript?

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

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

尼康示例:

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

摩托罗拉 phone 示例:

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

在摩托罗拉案例中,我会简单地使用 MakeModel 的组合。

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

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" }));

您可以使用 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));

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;
});