2013-10-23 11 views
0

上午,排序和模式匹配JSON有象下面這樣的JSON

[ 
    { 
     "id": "1", 
     "freq": "1", 
     "value": "Tiruchengode", 
     "label": "Tiruchengode" 
    }, 
    { 
     "id": "2", 
     "freq": "1", 
     "value": "Coimbatore", 
     "label": "Coimbatore" 
    }, 
    { 
     "id": "3", 
     "freq": "1", 
     "value": "Erode", 
     "label": "Erode" 
    }, 
    { 
     "id": "4", 
     "freq": "1", 
     "value": "Madurai", 
     "label": "Madurai" 
    }, 
    { 
     "id": "5", 
     "freq": "1", 
     "value": "Salem", 
     "label": "Salem" 
    }, 
    { 
     "id": "6", 
     "freq": "1", 
     "value": "Tiruchirappalli", 
     "label": "Tiruchirappalli" 
    }, 
    { 
     "id": "7", 
     "freq": "1", 
     "value": "Tirunelveli", 
     "label": "Tirunelveli" 
    } 
] 

我需要的圖案與標籤項的比賽就在這個JSON(IE),如果鍵入tiru,那麼它必須結果標籤項目有tiru子串。如果它是單個項目數組,我知道如何對它進行模式匹配和排序。這裏我完全沒有意識到,如何使用數組中的標籤項進行模式匹配。是否有可能?。我需要用純JavaScript,任何幫助傢伙?

回答

1

JSON.parse()將幫助將jsonString轉換爲JsonObject,然後迭代對象使用indexOf進行模式匹配。

var jsonString = '[{"id": "1","freq": "1","value": "Tiruchengode","label": "Tiruchengode"},{"id": "2","freq": "1","value": "Coimbatore","label": "Coimbatore"},{"id": "3","freq": "1","value": "Erode","label": "Erode"},{"id": "4","freq": "1","value": "Madurai","label": "Madurai"},{"id": "5","freq": "1","value": "Salem","label": "Salem"},{"id": "6","freq": "1","value": "Tiruchirappalli","label": "Tiruchirappalli"},{"id": "7","freq": "1","value": "Tirunelveli","label": "Tirunelveli"}]'; 

    var jsonObjects = JSON.parse(jsonString);  
    var pattern = "tiru"; 

    for(var key in jsonObjects){ 
     var label = jsonObjects[key].label.toUpperCase();  
     if(label.indexOf(pattern.toUpperCase()) != -1){ 
      document.write(label+"<br/>"); 
     } 
    } 
3

您可以使用JavaScript 1.6中引入的功能陣列的方法,特別是filter

var search = 'tiru'; 
var results = obj.filter(function(item) { 
    var a = item.label.toUpperCase(); 
    var b = search.toUpperCase(); 
    return a.indexOf(b) >= 0; 
}); 

如果你想標籤而已,你就可以使用map返回單獨只屬性:

var labels = obj.filter(function(item) { 
    var a = item.label.toUpperCase(); 
    var b = search.toUpperCase(); 
    return a.indexOf(b) >= 0; 
}).map(function(item) { 
    return item.label; 
}); 

實質上,filter是一種可用於任何Array的方法,該方法返回僅包含提供的函數返回true的那些成員的新Array

+0

indexOf不忽略大小寫,在檢查> = 0時將標籤和模式都轉換爲大寫。 – N20084753

+0

謝謝德蘭。它運作良好。 – Guts