0

以下のような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部分文字列を持つラベル項目が返されます.単一の項目配列の場合、パターン一致して並べ替える方法を知っています. ここでは、配列内のラベル項目を使用してパターン一致する方法を完全に認識していません。それは可能ですか?純粋な JavaScript を使用する必要があります。ヘルプはありますか?

4

2 に答える 2

3

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

基本的には、指定された関数が true を返すメンバーのみを含むnew を返すfilter任意のメソッドで使用できます。ArrayArray

于 2013-10-23T12:16:59.993 に答える