【问题标题】:Search for names with particular starting in javascript object搜索以 javascript 对象开头的特定名称
【发布时间】:2012-12-09 16:45:58
【问题描述】:

我有一个如下所示的 json 对象,其中包含 id-to name 映射:

   idToNamesMap =  {"1":"name5","2":"name6","3":"name7","4":"name8"} 

现在我想在这个 id-to name 映射对象中搜索名称。例如,搜索并返回所有以字符串“name”开头的名称以及相应的 id。你能建议怎么做吗?


我使用 jQuery 1.7。

【问题讨论】:

    标签: javascript jquery json search


    【解决方案1】:

    如果我理解正确,您想过滤以"name" 开头的项目,然后翻转对象键/值:

    var idToNamesMap =  {"1":"name5","2":"name6","3":"name7","4":"name8"},
    searchPattern = /^name/;
    
    function searchMap(map, pattern)
    {
        var res = {};
    
        $.each(map, function(i, name) {
            if (pattern.test(name)) {
                res[name] = i;
            }
        });
    
        return res;
    }
    
    console.log(searchMap(idToNamesMap, searchPattern));
    

    输出:

    {"name5": "1", "name6": "2", "name7": "3", "name8": "4"}
    

    另请参阅:jQuery.each()

    【讨论】:

    • 谢谢,您能否说明一下如何使用变量指定要搜索的模式,而不是直接在代码中指定?
    • @user01 更新了,现在更有意义了吗?
    • 是的,当然..还有一件事..想从你那里澄清一下 name 变量是什么?(这有点令人困惑)
    • @user01 基本上它包含idToNamesMap 的每个属性的值(这是$.each() 所做的),我刚刚称它为name 因为你如何命名对象:)
    【解决方案2】:

    也许是这样。它为您提供了一种使用正则表达式搜索条目的方法:

    var idToNamesMap =  {"1":"name5","2":"name6","3":"name7","4":"name8"};
    
    idToNamesMap.search = function( pattern ) {
        var result = {};
        for ( var k in this ) {
            if ( 'function' != typeof this[ k ] ) {
                if ( this[ k ].test( pattern ) ) {
                    result[ k ] = this[ k ];
                }
            }
        }
        return result;
    }
    
    console.log( idToNamesMap.search( /^name/ ) );​
    

    在这里试试:http://jsfiddle.net/XaWqd/1/

    【讨论】:

      【解决方案3】:
      var newObject = {};
      
      for (key in idToNamesMap) {
          if (idToNamesMap[key].substring(0,4)=='name') 
             newObject[idToNamesMap[key]] = key;
      }
      

      FIDDLE

      【讨论】:

        【解决方案4】:

        试试这样的:

        示例代码

        $(document).ready(function(){
            var jarr = {'a':'one', 'b':'two', 'c':'3'}
            $.each(jarr, function(key, value){
                if((/^one/).test(value)){
                    alert(key + ' -> ' + value);
                }
            });
        });​
        

        工作小提琴

        这是一个有效的JSFiddle

        选项

        您可以使用 3 个选项来实现此目的。

        1. 使用简单的正则表达式(如上):

          var match = /^name/.test(myString);

        2. 使用indexOf方法:

          var match = string.length => 7 && string.indexOf("name") == 0;

        3. 使用substring 方法:

          var match = string.length => 7 && string.substr(0, 4) == "name";

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-14
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-25
          相关资源
          最近更新 更多