06. Type Ahead
14078 ワード
プロジェクトの概要
コード作成順序
学んだこと
- Fetch API
:データの非同期送受信のための最新のAPI、Promiseオブジェクトを返します.
: .json()メソッドは、応答ストリームを取得し、ストリームが完了するまでストリームを読み出し、bodyテキストからJSONに変換して解析するpromiseを返す.
:基本コード
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch - spread syntax('...')
:arrayまたはobjectのelementを関数のパラメータとして使用する既存のapply()を置き換えます.
:arratまたはobjectの要素の追加、削除またはマージを容易に実現
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_syntax
-regExp(正規表現)
:文字列内の特定の文字の組み合わせに対応するモードです.
:JavaScriptでは正規表現もオブジェクト
:正規表現関連メソッド(match、replaceなど)を使用するには、まず新しいRegExpオブジェクトを関連メソッドのパラメータとして使用する必要があります.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D
最終コード
<script>
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);
console.log(cities);
});
// cities에서 검색어와 매치되는 데이터만 선별
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);
</script>
に感銘を与える
Reference
この問題について(06. Type Ahead), 我々は、より多くの情報をここで見つけました https://velog.io/@mementomori/06.-Type-Aheadテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol