0

ID から名前へのマッピングを含む、以下に示すような json オブジェクトがあります。

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

次に、この ID から名前へのマッピング オブジェクトで名前を検索します。たとえば、文字列「name」で始まるすべての名前を、対応する ID とともに検索して返します。これを行う方法を提案できますか?


jQuery1.7を使用しています。

4

4 に答える 4

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()

于 2012-12-22T08:54:32.863 に答える
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/

于 2012-12-22T08:56:37.133 に答える
0
var newObject = {};

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

フィドル

于 2012-12-22T08:54:07.800 に答える
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";

于 2012-12-22T09:06:53.820 に答える