使用索引名称在JSON数组中搜索内容

时间:2015-08-07 11:27:06

标签: javascript jquery

我有一个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

我做错了什么?

2 个答案:

答案 0 :(得分:6)

您可以使用.filterindexOf(在字符串中查找值),就像这样



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;
&#13;
&#13;

答案 1 :(得分:1)

你也可以这样做

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

但我建议在你的情况下使用indexOf