1

クライアント側でJSONオブジェクトをフィルタリングしたいと思います。それまでは、サーバー側で次のようにしました。

SELECT * FROM table WHERE row1, row2, row3 LIKE %search%

クライアント側でもJSONオブジェクトを使って同じことをしたいと思います。

たとえば、次のJSONオブジェクトを使用できます。

[{'Key1' : 'Value1', 'Key2': 'Value2'}
{'Key3': 'Value3', 'Key4': 'Value4'}]

フィルタ「ue3」を使用する場合、それを返したい[{'Key3': 'Value3', 'Key4': 'Value4'}]

4

3 に答える 3

7

「オブジェクトの配列に対してすべてのフィールドの検索を実行し、フィールドの1つに検索文字列の一部が含まれているオブジェクトのみを返したいのです。」

var a = [{'Key1' : 'Value1', 'Key2': 'Value2'},
         {'Key3': 'Value3', 'Key4': 'Value4'}];

var b = filterValuePart(a, "ue3");

function filterValuePart(arr, part) {
    return arr.filter(function(obj) {
        return Object.keys(obj)
                     .some(function(k) { 
                               return obj[k].indexOf(part) !== -1; 
                           });
    });
});

シム、シム、シム


大文字と小文字を区別しないようにするには:

function filterValuePart(arr, part) {
    part = part.toLowerCase();

    return arr.filter(function(obj) {
        return Object.keys(obj)
                     .some(function(k) { 
                               return obj[k].toLowerCase().indexOf(part) !== -1; 
                           });
    });
});
于 2013-03-02T15:03:43.757 に答える
1

このJavaScriptオブジェクトがあると仮定します:

var array = [
   {'Key1' : 'Value1', 'Key2': 'Value2'},
   {'Key3': 'Value3', 'Key4': 'Value4'}
];

次に、プロパティ値に文字列が含まれているオブジェクトを次のように検索できます。

var searched = 'ue3';
var matches = array.filter(function(v) {
     for (key in v) {
        if (v[key].indexOf(searched)!=-1) return true;
     }
     return false;
});
var match = matches.length==0 ? null : matches[0];

IE 8はフィルターをサポートしていませんが、このMDNの記事はシムを提供していることに注意してください。

于 2013-03-02T14:54:58.990 に答える
0

@Ping-javascript lib DefiantJS(http://defiantjs.com)を使用できます。これを使用すると、次のようなことができます。

var data = [
   {
      "Key1": "Value1",
      "Key2": "Value2"
   },
   {
      "Key3": "Value3",
      "Key4": "Value4"
   }
].
res = JSON.search( data, '//*[contains(., 'ue3')]' );

console.log( res[0].key3 );
// Value3

これが実用的なフィドルです:http:
//jsfiddle.net/hbi99/s8ZVg/

JSON構造が引用されていることに注意してください。これは、JSONとして引用されているはずです。DefiantJSは、「search」と呼ばれるメソッドを使用してグローバルオブジェクトJSONを拡張し、XPathクエリ(標準化されたクエリ言語)を使用して、配列内の一致を返します(一致が見つからなかった場合は空の配列)。

于 2014-01-05T09:20:26.217 に答える