Using the typeahead.js library to create an autocomplete input from a two-dimensional array that was fetched with an Ajax request.
typeahead.js is created by Twitter to “provide a strong foundation for building robust typeaheads”. In this case, a typeahead is an autocomplete/auto-suggest input.
This example is for NBA teams typeahead using the API endpoint https://api.nbastatr.com/teams/ which provides a two-dimensional array.
Guide
Define the array to store what you want to search and then create the Ajax call for the data. Then a loop is done to fill the created array ensuring that no data is duplicated into the array:
let teams = []; $.ajax({ url: 'https://api.nbastatr.com/teams/', type: 'GET', dataType: 'json', success: function (json) { let arrayLength = json.length; for (let i = 0; i < arrayLength; i++) { if (!teams.includes(json[i]['name_full'])) { teams.push(json[i]['name_full']); } } return teams; } });
Now the substring match function is provided by typeahead.js here:
let substringMatcher = function (strs) { return function findMatches(q, cb) { let matches, substringRegex; matches = []; substrRegex = new RegExp(q, 'i'); $.each(strs, function (i, str) { if (substrRegex.test(str)) { matches.push(str); } }); cb(matches); }; };
Finally initialize the typeahead and use the team’s array that got built.
$('#nba-teams.typeahead').typeahead({ hint: true, highlight: true, minLength: 1 }, { name: 'teams', source: substringMatcher(teams) } );
The input HMTL:
<div id="nba-teams"> <input class="typeahead form-control" type="text" placeholder="NBA teams"> </div>
The typeahead input is complete.