2015-08-07 2 views
1

У меня есть массив JSON [{"id":38,"label":"def"},{"id":10,"label":"abc"}]Поиск содержимого в формате JSON массива с помощью имени индекса

Мне нужно, чтобы получить результат в массив {"id":38,"label":"def"}, когда ввести ключевое слово «D» или «е» «е», как это.

Я попытался с помощью JQuery, чтобы сделать это:

var jsonArrr =[{"id":38,"label":"def"},{"id":10,"label":"abc"}]; 

var matchMe = new RegExp('^' + 'e', 'i'); 
    var matches = []; 
     for (var i in jsonArrr) { 
      if (jsonArrr[i].label.search(matchMe) > -1) { 
        matches.push({'id': i, 'label': jsonArrr[i].label}); 
      } 
     } 

content = ''; 
for (var i in matches) { 
       console.log(matches[i].label); 
       } 

Но этот код выводит

Uncaught TypeError: Cannot read property 'search' of undefined 

Что я делаю неправильно?

+0

вместо поиска вы можете использовать функцию совпадения – Raghavendra

ответ

6

Вы можете использовать .filter и indexOf (найти значение в строке), как этот

var data = [{"id":38,"label":"def"}, {"id":10,"label":"abc"}, {"id":38,"label":"ABC"}]; 
 

 
function filter(data, keyword) { 
 
    return data.filter(function (el) { 
 
    return el.label.indexOf(keyword) >= 0; 
 
    }) 
 
} 
 

 
function filterCaseInsensitive(data, keyword) { 
 
    return data.filter(function (el) { 
 
    return new RegExp(keyword, 'i').test(el.label); 
 
    }) 
 
} 
 

 
$('#keyword').on('keyup', function() { 
 
    $('#result').html(JSON.stringify(filter(data, this.value))); 
 
    $('#resultCaseInsensitive').html(JSON.stringify(filterCaseInsensitive(data, this.value))); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="keyword" type="text"> 
 
<div id="result"></div> 
 
<div id="resultCaseInsensitive"></div>

+0

Можно ли проверить регистр, нечувствительный .. т.е. получить тот же результат, когда нажата кнопка «a» или «A»? –

+0

@V P Вы могли бы привести мне пример, что вы хотите, чтобы получить результат? –

+0

т. Е. При вводе ключевого слова «d» od «D» показывает тот же результат. CaseInsensitive Search/Filtering .. –

1

вы также можете сделать как этот

jsonArrr.filter(function(item) { return new RegExp('.*'+keyword+'.*').test(item.label); }) 

, но я предлагаю используйте indexOf в вашем случае