6、Fetch 结合 filter 实现快速匹配

涉及特性

  • Promise
    • fetch()
    • then()
    • json()
  • Array
    • filter()
    • map()
    • push()
    • join()
    • Spread syntax 扩展语句
  • RegExp
    • match()
    • replace()

效果

在这里插入图片描述

代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Type Ahead 👀</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <form class="search-form">
    <input type="text" class="search" placeholder="City or State">
    <ul class="suggestions">
      <li>Filter for a city</li>
      <li>or a state</li>
    </ul>
  </form>
  <script>
    const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';
    var cities = [];
    fetch(endpoint).then(blob => blob.json()).then(data => {
      cities.push(...data);
    }).catch(err => conosle.error(err));

    var input = document.querySelector('.search');
    var suggestions = document.querySelector('.suggestions');
    input.addEventListener('change', showCitise);
    input.addEventListener('keyup', showCitise);

    function showCitise(envent) {
      let value = envent.target.value;
      let peck = cities.filter(city => city.city.match(value) || city.state.match(value));
      const items = peck.map(item => {
        const cityName = item.city.replace(value, `<span class="hl">${value}</span>`);
        const stateName = item.state.replace(value, `<span class="hl">${value}</span>`);
        return `
      <li>
        <span class="name">${cityName}, ${stateName}</span>
        <span class="population">${numberWithCommas(item.population)}</span>
      </li>
    `;
      }).join('');// join能够去除数组中的 ,
      suggestions.innerHTML = items;
    };

    function numberWithCommas(x) {// 这个正则很深奥呢
      return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
      /*
      123456789 - 》123,456,789
      23456789 - 》23,456,789
      3456789 - 》3,456,789
      
      */ 
    }

  </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值