从javascript对象开始搜索特定的名称

时间:2012-12-22 08:49:17

标签: javascript jquery json search

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

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

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


我使用jQuery 1.7。

4 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望过滤以"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()

答案 1 :(得分: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/

答案 2 :(得分:0)

var newObject = {};

for (key in idToNamesMap) {
    if (idToNamesMap[key].substring(0,4)=='name') 
       newObject[idToNamesMap[key]] = key;
}

FIDDLE

答案 3 :(得分:0)

尝试这样的事情:

示例代码

$(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";