type ahead
const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';
const cities = []; // ๋ฐ์ดํ๊ฐ์ ๋ฐ์
fetch(endpoint)
.then(blob => blob.json()) // ์ ์ด์จ
.then(data => cities.push(...data)); // ๋ฐ์ดํฐ
//json ๋ด์ฉ ๊ฐ์ ธ์ค๊ธฐ
// fetch -> ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ ์ด๋คํ์ผ์ ์๋ตํด๋ฌ๋ผ๊ณ ์์ฒญํ๊ฒ
function findMatches(wordToMatch, cities) {
return cities.filter(place => {
//๋์๋ ์ฃผ๊ฐ ๊ฒ์ํ ๊ฒ๊ณผ ์ผ์นํ๋์ง ํ์ธํ ์ผ์นํ๋ ๋จ์ด๋ง ์ ๋ฐฐ์ด ๋ง๋ค๊ธฐ
const regex = new RegExp(wordToMatch, 'gi');
return place.city.match(regex) || place.state.match(regex)
});
}
// ์ซ์์ ์ฒ ๋จ์ ์ฝค๋ง ํ์
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
// ์ผ์นํ๋ ๋จ์ด ๋ณด์ฌ์ฃผ๊ธฐ
function displayMatches() {
const matchArray = findMatches(this.value, cities);
const html = matchArray.map(place => {
const regex = new RegExp(this.value, 'gi');
const cityName = place.city.replace(regex, `<span class="hl">${this.value}</span>`);
const stateName = place.state.replace(regex, `<span class="hl">${this.value}</span>`);
return `
<li>
<span class="name">${cityName}, ${stateName}</span>
<span class="population">${numberWithCommas(place.population)}</span>
</li>
`;
}).join('');
suggestions.innerHTML = html;
}
// ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฌ๊ธฐ
const searchInput = document.querySelector('.search');
const suggestions = document.querySelector('.suggestions');
searchInput.addEventListener('change', displayMatches);
searchInput.addEventListener('keyup', displayMatches);
fetch()
์๋ฒ์๊ฒ ์ด๋คํ์ผ์ ์๋ตํ๋ผ๊ณ ์์ฒญํ๋๊ฒ์ด๋ค.
๋น๋๊ธฐ๋ก ์ด๋ฃจ์ด์ง๊ธฐ๋๋ฌธ์ fetch ๋๋ ๋์ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์คํํ๋ค.
๊ทธ ์์ ์ด ๋๋๊ณ ๋์ ์ฝ๋ฐฑํจ์๋ฅผ ์คํ์์ผ์ฃผ๋๊ฒ์ ๐ then()์ด๋ผ๊ณ ํ๋ค.
response ๊ฐ์ฒด ๊ฐ ๋ค์ด๊ฒ ๋๋๋ฐ ์ฌ๊ธฐ ์์๋ ์๋ฒ๊ฐ ์๋ตํ ๊ฒฐ๊ณผ๊ฐ์ด ์๋ค.
fetch(`member.json`).then(function (blob) {
blob.json()
.then(function (data) {
console.log(data);
console.log('hello');
});
})

.push
const parts = ['knoo', 'shoo'];
let lyrics = ['head', ...parts, 'and', 'toes']; //["head", "shoulders", "knees", "and", "toes"]
const arr1 = [0, 1, 2];
const arr2 = [3, 4, 5];
arr1.push(...arr2); // 0 , 1, 2, 3, 4, 5
console.log(lyrics);
console.log(arr1);

findMatches()
function findMatches(wordToMatch, cities) {
return cities.filter(place => {
const regex = new RegExp(wordToMatch, "gi");
return place.city.match(regex) || place.state.match(regex);
// city์ state ๋๊ฐ ์ด๊ธฐ๋๋ฌธ์ || ์ฐ์ฐ์ ์ฌ์ฉ
});
}
findMatches() ์ธ์ 2๊ฐ๊ฐ ํ์ํจ ํ๋๋ ๊ฒ์ํ ๋จ์ด, ํ๋๋ ์ ์ฒด ๋ฐฐ์ด
RegExp ๐ ๊ฐ์ฒด๋ ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ๊ณผ ์์ฑ์๋ก์จ ์์ฑํ
๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ ๋งค๊ฐ๋ณ์๋ ๋ ๋น๊ธ์ผ๋ก ๊ฐ์ธ์ผ ํ๋ฉฐ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
์์ฑ์ ํจ์์ ๋งค๊ฐ๋ณ์๋ ๋น๊ธ์ผ๋ก ๊ฐ์ธ์ง ์์ผ๋ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gi ๐ global match์ ignore case๋ฅผ ๋ปํจ
์ฌ์ฉ์ ์
๋ ฅํ ๋จ์ด๋ก ๊ฒฐ๊ณผ๊ฐ ์ฐพ๊ธฐ
function displayMatches(){
console.log(this.value);
}
const searchInput = document.querySelector(".search");
const resultArea = document.querySelector(".result");
searchInput.addEventListener("change", displayMatches);
searchInput.addEventListener("keyup", displayMatches);
/*์ฌ์ฉ์๊ฐ input์ ์
๋ ฅํ๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ , findMatches() ๊ฒฐ๊ณผ๋ฅผ ๋ณด.
input๊ณผ ๊ฒฐ๊ณผ์ฐฝ์ ์
๋ ํ
ํ๊ณ , input์๊ฒ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๊ฑธ์ด์ค๋ค.*/
function displayMatches() {
const matchArray = findMatches(this.value, strArr); // this.value ์ ๋ฐฐ์ด์ด
console.log(matchArray);
}

Last updated
Was this helpful?