基于匹配字符串对字符串数组进行排序

时间:2012-03-01 00:39:45

标签: javascript string json search

我有一个包含许多字符串的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值对它们进行排序。

建议使用算法或示例源代码!

2 个答案:

答案 0 :(得分:2)

您可以将比较功能传递给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 值排序的数组。

答案 1 :(得分:0)

我最后使用了许多标准: -

  1. 搜索结果和搜索查询的单个字词匹配
  2. 完全匹配结果和搜索查询的额外积分
  3. 与搜索结果总长度匹配的所有单词的长度部分
  4. 如果搜索查询的索引小于搜索结果总长度的一半
  5. ,则会获得额外积分
  6. 价格过滤器,用于进一步改进结果。
  7. 这是最终的result