我希望设置一个简单的搜索输入来检查json文件。
我当前的代码是这样的,这不起作用,因为每个json父代都有一个名字。如果我删除名称“json1”/“json2”它的工作原理。
…
您可以使用 Object.values
Object.values
var dataArr = [{ "json1": { "car": "honda", "id": "0123", "name": "jim" }, "json2": { "car": "toyota", "id": "0124", "name": "james" } }]; $("#search").on('keypress keyup change input', function() { var arrival = $(this).val().toLowerCase(); let filterVal = filteredVal(arrival); let car = filterVal[0] ? filterVal[0].car : '' $('#matches').text(!arrival.length ? '' : car); }) function filteredVal(searchedName) { let getKeys = Object.values(dataArr[0]).filter(function(elem) { return elem.car == searchedName; }); return getKeys; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input id="search" type="text" placeholder="Search term"> <div id="matches" style="height:70px; overflow-y:hidden; white-space:pre"></div>
只需将第一个代码段数组转换为第二个代码段数组。运用 Object.values()
Object.values()
var dataArr = [{ "json1": { "car": "honda", "id": "0123", "name": "jim" }, "json2": { "car": "toyota", "id": "0124", "name": "james" } }]; dataArr = Object.values(dataArr[0]); $("#search").on('keypress keyup change input', function() { var arrival = $(this).val().toLowerCase(); $('#matches').text(!arrival.length ? '' : dataArr.filter(function(place) { return (place.name.toLowerCase().indexOf(arrival) !== -1); }).map(function(place) { return place.name; }).join('\n')) });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <b>this does not work. because i have parent names for my json structure</b> <input id="search" type="text" placeholder="Search term"> <div id="matches" style="height:70px; overflow-y:hidden; white-space:pre"></div>