【问题标题】:sort and pattern match an json排序和模式匹配一​​个 json
【发布时间】:2013-11-01 17:00:27
【问题描述】:

我有一个像下面这样的 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 中的标签项进行模式匹配(即),如果我输入 tiru,那么它必须导致标签项中包含 tiru 子字符串.如果它是一个单项数组,我知道如何进行模式匹配和排序。这里我完全不知道,如何使用数组中的标签项进行模式匹配。是否有可能?。我需要使用 Pure javascript,有帮助吗?

【问题讨论】:

    标签: javascript regex json search


    【解决方案1】:

    您可以使用 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 都可用的方法,它返回一个新的Array,其中只包含所提供函数返回true 的那些成员。

    【讨论】:

    • indexOf 不忽略大小写,在检查 >=0 时将标签和模式都转换为大写。
    【解决方案2】:

    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/>");
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-21
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      相关资源
      最近更新 更多