js实现模糊搜索和排序

简介: js实现模糊搜索和排序
[{
"name": "乐多",
"identity": 1,
"popularity": 150
 
}, {
"name": "捏捏脸",
"identity": 1,
"popularity": 160
 
}, {
"name": "别重复",
"identity": 2,
"popularity": 120
 
}, {
"name": "南山",
"identity": 1,
"popularity": 178
 
}, {
"name": "随风",
"identity": 1,
"popularity": 160
 
}, {
"name": "泉",
"identity": 1,
"popularity": 170
 
}, {
"name": "6v",
"identity": 1,
"popularity": 160
 
}, {
"name": "婷婷",
"identity": 1,
"popularity": 155
}]
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
      input {
        width: 30%;
        margin-left: 35%;
        margin-top: 50px;
      }
 
      .title {
        margin-left: 15%;
        margin-top: 20px;
 
        width: 70%;
        display: flex;
      }
 
      .name {
 
        margin-top: 15px;
        width: 33%;
        text-align: center;
      }
 
      .contents {
        width: 70%;
        margin-left: 15%;
        margin-top: 10px;
 
      }
 
      .content {
        width: 100%;
 
        display: flex;
      }
    </style>
  </head>
  <body>
    <input type="text" class="input" oninput="search()" />
    <div class="title">
      <div class="name">姓名</div>
      <div class="name">性别</div>
      <div class="name" onclick="boss()">身高</div>
    </div>
    <div class="contents">
      <div class="content">
        <div></div>
        <div></div>
        <div></div>
      </div>
    </div>
    <script>
      // 声明变量用于存储从服务器获取的 JSON 数据
      let data;
 
      // 获取第一个类名为 'input' 的元素
      let input = document.getElementsByClassName('input')[0];
 
      // 创建 XMLHttpRequest 对象
      let xhr = new XMLHttpRequest();
 
      // 使用 GET 方法异步请求指定路径的资源
      xhr.open('get', 'js/mohu.json', true);
 
      // 发送请求
      xhr.send();
 
      // 绑定 onreadystatechange 事件处理函数,处理响应状态变化
      xhr.onreadystatechange = function() {
 
        // 检查请求是否已完成且响应状态为 200(成功)
        if (xhr.readyState == 4 && xhr.status == 200) {
 
          // 获取响应文本
          let text = xhr.responseText;
 
          // 将响应文本解析为 JSON 对象
          data = JSON.parse(text);
 
          // 遍历数据数组,根据身份属性进行转换
          for (let i = 0; i < data.length; i++) {
            if (data[i].identity == 1) {
              data[i].identity = '女';
            } else if (data[i].identity == 2) {
              data[i].identity = '男';
            }
          }
 
          // 调用渲染函数,传入处理后的数据
          renderer(data);
        }
      };
 
      // 获取第一个类名为 'contents' 的元素
      let contents = document.getElementsByClassName('contents')[0];
 
      // 定义渲染函数,接收数据并将其显示在页面上
      function renderer(data) {
        let str = '';
 
        // 遍历数据数组,生成 HTML 内容
        for (let i = 0; i < data.length; i++) {
          str += `<div class="content">
                        <div class="name">${data[i].name}</div>
                        <div class="name">${data[i].identity}</div>
                        <div class="name">${data[i].popularity}</div>
                    </div>`;
        }
 
        // 将生成的 HTML 内容插入到 'contents' 容器中
        contents.innerHTML = str;
      }
 
      // 定义布尔变量 i,用于指示排序顺序
      let i = false;
 
      // 定义点击函数,用于排序数据
      function boss() {
 
        // 如果 i 为 false,按受欢迎度从小到大排序
        if (i == false) {
          data.sort(function(a, b) {
            return a.popularity - b.popularity;
          });
 
          // 如果 i 为 true,按受欢迎度从大到小排序
        } else if (i == true) {
          data.sort(function(a, b) {
            return b.popularity - a.popularity;
          });
        }
 
        // 反转 i 的值
        i = !i;
 
        // 调用渲染函数,更新页面内容
        renderer(data);
      }
 
      // 定义搜索函数,用于根据输入框中的值过滤数据
      function search() {
        let value = input.value;
        let arr = [];
 
        // 遍历数据数组,查找名称包含输入值的项
        for (let i = 0; i < data.length; i++) {
          if (data[i].name.indexOf(value) >= 0) {
            arr.push(data[i]);
          }
        }
 
        // 调用渲染函数,显示过滤后的数据
        renderer(arr);
      }
    </script>
  </body>
</html>
目录
相关文章
|
2月前
|
前端开发 JavaScript 算法
使用 JavaScript 数组方法实现排序与去重
【10月更文挑战第21天】通过灵活运用 `sort()` 方法和 `filter()` 方法,我们可以方便地实现数组的排序和去重。同时,深入理解排序和去重的原理,以及根据实际需求进行适当的优化,能够更好地应对不同的情况。可以通过实际的项目实践来进一步掌握这些技巧,并探索更多的应用可能性。
104 59
|
6月前
|
JavaScript 前端开发
JS如何配合input框实现模糊搜索
JS如何配合input框实现模糊搜索
176 2
|
2月前
|
JavaScript 前端开发
js实现模糊搜索
js实现模糊搜索
29 1
|
2月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
18 0
|
3月前
|
JavaScript 前端开发
用Javascript对二维数组DIY按汉语拼音的排序方法
用Javascript对二维数组DIY按汉语拼音的排序方法
|
4月前
|
JavaScript
js之模糊搜索
js之模糊搜索
|
4月前
|
JavaScript
js之模糊搜索
js之模糊搜索
|
4月前
|
JSON JavaScript 前端开发
使用js实现input框的模糊搜索
使用js实现input框的模糊搜索
33 0
|
6月前
|
JavaScript
JS数组排序看懂这篇就够了
JS数组排序看懂这篇就够了
42 1
|
6月前
|
JavaScript 前端开发 数据管理
使用Sortable.js库 实现Vue3 elementPlus 的 el-table 拖拽排序
使用Sortable.js库 实现Vue3 elementPlus 的 el-table 拖拽排序
1641 1