【问题标题】:How to do spelling check with each of the property of an array of Object?如何对对象数组的每个属性进行拼写检查?
【发布时间】:2023-03-08 21:49:01
【问题描述】:

我正在开发一个程序,其中用户将传递一个参数,并且该程序将给出与它在 Object 数组中找到的结果几乎相同的匹配。所以我有一个来自database的对象数组,所以当我的用户将传递name时,对象数组上的搜索条件应该像这样假设用户现在传递了一个名为Jack Ma的名称在我的数组上有以下对象,如

[
{
name: "Jacky Ma"
},
{
name: "Jacky Man"
},
{
name: "Jack Mun"
},
{
name: "Jacob Ma"
},
{
name: "Jack Ma"
}
]

因此对于以下情况,Jacky MaJack MunJacob Ma 应该在对象数组中重新调整。程序唯一应该检查的是每个单词的拼写是否与对象 lowerCase upperCase 中的单词的拼写匹配,这两个单词都无关紧要,或者是否有一个或多个 2。唯一的事情如果第一个单词的拼写与第一个单词的拼写匹配,或者第二个单词的拼写与对象的第二个单词匹配,它应该检查单词的拼写,然后它应该返回。如果两者都不匹配或不匹配,则应返回空数组。

谁能帮助我,我该怎么做?提前致谢。

【问题讨论】:

  • 请分享您尝试过的代码。
  • @HassanImam 这没有给出确切的答案const filterData = searchClan.items.filter(n => n.name.toLowerCase() === valiDateArgs.toLowerCase())

标签: javascript node.js


【解决方案1】:

在您当前的代码中,您正在比较整个字符串“Jack Ma”,而不是“Jack”和“Ma”。您需要拆分名称属性和字符串,遍历它们并进行比较:

const filterData = searchClan.items.filter(
    n => {
        const splittedName = n.name.toLowerCase().split(' ');
        const splittedArgs = validateArgs.toLowerCase().split(' ');
        return splittedArgs.some((argument, index) => splittedName[index] && splittedName[index] === argument)
    });

如果 splittedArgs 数组中的元素之一(在索引 "index" 处)与 splittedName 数组中索引 "index" 处的元素匹配,则 "some" 方法返回 true。

【讨论】:

  • 但是我已经加入了像这里let valiDateArgs = args.join(" ")这样的词实际上因为它是一个论点,所以不可能有多少词可能是1,2,3或更多结果应该根据用户提供的参数来。参数也不应该像名字或姓氏一样。
  • 哦,好的。所以你的意思是,你想得到所有结果,使得 name 属性中的第 N 个单词与第 N 个参数匹配?就像“马云CEO”应该和“杰夫贝索斯CEO”一样对吧?
  • 这正是我想要的
猜你喜欢
  • 1970-01-01
  • 2021-12-21
  • 2011-07-30
  • 1970-01-01
  • 2020-11-05
  • 2019-01-09
  • 2012-03-15
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多