2012-03-01 104 views
0

我有一个包含多个字符串的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" 
    } 
]​ 

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

建议算法或示例源代码将做!

+0

举个例子会做 – vol7ron 2012-03-01 00:41:03

+0

请包括的例子正是源数据结构看起来像(字符串数组?键/字符串对象?)。而且,您将不得不提供有关“他们匹配的密切程度”的信息。 – jfriend00 2012-03-01 00:41:04

+0

与JSON相关的数据是否相关?解析它有问题吗?或者你的问题到底是什么? – 2012-03-01 00:45:24

回答

0

我这样做是最终使用了一些标准: -

  1. 搜索结果和搜索查询
  2. 的结果和搜索查询
  3. 部的长度:完全匹配的一种额外的学分的单词匹配与搜索结果的总长度匹配的所有词
  4. 如果搜索查询出现在小于搜索结果总长度的一半的索引处的额外信用
  5. 价格f ilter进一步改进结果。

下面是最终result

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值排序的数组。

+0

但是,我不希望按字母顺序排列数组。我只是希望根据它们与搜索字符串的距离有多接近来给它们一个权重 – 2012-03-01 09:24:51

+0

在比较函数中放入任何你喜欢的逻辑来确定返回的值。平等比较是一个简单的例子,如果你愿意,你可以使用更复杂的东西。 – RobG 2012-03-02 02:29:50