2012-03-01 52 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