我有一个JSON数组[{"id":38,"label":"def"},{"id":10,"label":"abc"}]
输入关键字时,我需要将结果数组设为{"id":38,"label":"def"}
" d"或者" e" " f"像那样。
我尝试使用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 :(得分: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>
&#13;
答案 1 :(得分:1)
你也可以这样做
jsonArrr.filter(function(item) { return new RegExp('.*'+keyword+'.*').test(item.label); })
但我建议在你的情况下使用indexOf