【问题标题】:Sorting string array on the basis of a match string根据匹配字符串对字符串数组进行排序
【发布时间】:2012-03-01 00:39:44
【问题描述】:

我有一个包含多个字符串的 JSON 对象。我也有一个匹配字符串。现在我希望根据它们与匹配字符串的匹配程度(更多)来排列字符串的对象。

如何使用 Javascript 来做到这一点。

假设,我搜索了Philips SHM6110U Headphone

然后搜索将获取以下结果。

[
    {
        "position": 12,
        "link": "http:\/\/www.talash.com\/buy-online-philips-shl5001-hi-fi-headphone-headband-headphone-india-product.html",
        "image": "http:\/\/staticus.talash.com\/product_images\/p\/092\/DM1573_1lg__52708_thumb.jpg",
        "prod": "Philips Shl5001 Hi Fi Headphone Headband Headphone",
        "price": "Rs. 1000"
    },
    {
        "position": 12,
        "link": "http:\/\/www.talash.com\/buy-online-philips-shl5000-hi-fi-headphone-headband-headphone-india-product.html",
        "image": "http:\/\/staticus.talash.com\/product_images\/n\/497\/DM1572_1lg__57945_thumb.jpg",
        "prod": "Philips Shl5000 Hi Fi Headphone Headband Headphone",
        "price": "Rs. 1030"
    }
]​

现在,我必须根据匹配字符串“Philips SHM6110U Headphone”和 JSON 的 prod 值对它们进行排序。

建议一个算法或示例源代码就可以了!

【问题讨论】:

  • 请提供源数据结构的确切外观示例(字符串数组?键/字符串对象?)。而且,您必须提供有关确定“它们的匹配程度”的信息。
  • 以 JSON 格式获取数据是否相关?你有解析它的问题吗?或者你的问题到底是什么?
  • “JSON 对象”是什么意思?你的意思是“数组”吗? (如果不是,“排列”的概念是如何工作的?)

标签: javascript string json search


【解决方案1】:

您可以将比较函数传递给Array.prototype.sort

var results = [
  {"position": 12,
    ...
   "prod": "Philips Shl5001 Hi Fi Headphone Headband Headphone",
    ...
  },
  {"position": 12,
    ...
   "prod": "Philips Shl5000 Hi Fi Headphone Headband Headphone",
    ...
  }
]​;

results.sort(function(a, b) {
  return a.prod < b.prod? -1 : a.prod == b.prod? 0 : 1;
});

结果将是按 obj.prod 值排序的数组。

【讨论】:

  • 但是,我不希望按字母顺序对数组进行排序。我只是想根据搜索字符串的接近程度给他们一个权重
  • 将你喜欢的任何逻辑放在比较函数中以确定要返回的值。相等比较是一个简单的例子,如果你愿意,你可以使用更复杂的东西。
【解决方案2】:

我最终使用了一些标准:-

  1. 搜索结果和搜索查询的单个词匹配
  2. 完全匹配结果和搜索查询的额外积分
  3. 所有词的长度占搜索结果总长度的比例
  4. 如果搜索查询出现在小于搜索结果总长度一半的索引处,则获得额外积分
  5. 用于进一步改进结果的价格过滤器。

这是最后的result

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2015-08-13
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多