【问题标题】:Javascript - Searching For Specific Objects & Finding Objects With Mostly Correct MatchesJavascript - 搜索特定对象并找到大部分正确匹配的对象
【发布时间】:2021-06-10 19:03:37
【问题描述】:

怎么了,我有一个我一直在努力解决的一般 js 问题。不太清楚如何做到这一点,但我有一个这样的对象数组

{
      "postHeight": "5",
      "type": "CL",
      "barb": "None"
      (Actual object will have around 20-30 properties to search through)
}

我还有一个搜索功能,可让您搜索这些对象以找到正确的对象。数组中会有数百个这样的对象,所以如果我想找到一个 postHeight 为6、类型为CL、倒钩为straight 的特定对象,它将找到所有其中匹配,然后将匹配的整个对象推送到不同的数组。很容易。我的主要问题是我希望能够告诉用户,如果只有对象的 postHeighttype 匹配他们的输入,而 barb 匹配他们的输入,No exact matches found, but there is a match that has the correct postHeight and type, just with an incorrect barb.

不过,我不太确定该怎么做。可能有 15 个匹配 postHeights 的对象和 20 个匹配 types 的对象,但我想找到匹配次数最多的对象,然后告诉用户哪些属性匹配,哪些不匹配他们的搜索查询。

这个问题中使用的对象只有 3 个属性,但我们很可能每个对象都有 20-30 个范围内的更多属性

【问题讨论】:

  • 您可以返回一个对象数组以及符合条件的字段数。然后您可以按此计数对数组进行排序。

标签: javascript arrays database object search


【解决方案1】:

您可以根据匹配的字段数对对象数组进行排序:

const data = [
  {
        "postHeight": "6",
        "type": "CL",
        "barb": "straight"
  },
  {
        "postHeight": "5",
        "type": "CL",
        "barb": "straight"
  },
  {
        "postHeight": "6",
        "type": "SA",
        "barb": "straight"
  },
  {
        "postHeight": "6",
        "type": "CL",
        "barb": "None"
  }
]

const search = (obj) => {
    const entries = Object.entries(obj);
    const searchKeys = Object.keys(obj);
    return data.map((el) => {
        const matched = entries.filter(([k, v]) => el[k] === v);
        return { count: matched.length, ...el, unmatched: searchKeys.filter(k => el[k] !== obj[k]) }
    }).sort((a, b) => b.count - a.count);
}


console.log(search({postHeight: "6", type: "CL", barb: "straight"}));

【讨论】:

  • 如果我们决定添加更多属性,这似乎不可行。使用这种交集方法,它可以使用当前数字,但随着时间的推移,我们很可能会为每个对象添加更多属性。也许我应该将其编辑到我的原始帖子中
  • 改成不同的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2014-07-10
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
相关资源
最近更新 更多