2013-10-23 12 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